首页 / PHP / PHP丢失会话数据->会话文件删除太快
PHP丢失会话数据->会话文件删除太快
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了PHP丢失会话数据->会话文件删除太快,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2951字,纯文字阅读大概需要5分钟。
内容图文
![PHP丢失会话数据->会话文件删除太快](/upload/InfoBanner/zyjiaocheng/656/401327dc8d364cabb34415ee393aa4f8.jpg)
我陷入$_SESSION问题,而$_SESSION随机丢失了其数据.
我有一个包含不同页面的表单,并且用户有特定的时间浏览所有页面.
因此,我在首页上设置了会话变量,然后在其他页面上进行了检查.
start.php
<?php
session_start();
//Set Variable for Starting application
if (!isset($_SESSION['STARTED'])){
$_SESSION['STARTED'] = time();
}
app_init.php
<?php
session_start();
if ((!isset($_SESSION['STARTED'])) || (time() - $_SESSION['STARTED'] > MAX_TIMELIMIT)) {
echo '<!-- st: '.$_SESSION['STARTED'].'-->';
// Started Variable is not set or timelimit is over.
session_destroy(); // destroy session data in storage
session_unset(); // unset $_SESSION variable for the runtime
showTimeout('0'); // show timeout
}
之后的页面开始:
<?php
// get basic settings for applications
require_once (MODEL_PATH.'/app_init.php');
整个系统在本地安装,Developmentserver和Testserver上都可以正常工作.在Productionserver上,我在不同的时间超时.从30秒到10分钟不等. MAX_TIMELIMIT为20分钟.在这种情况下,$_ SESSION [‘STARTED’]始终为空.在其他环境中,即使20分钟后仍显示超时,也已正确设置.
附加信息:
>尝试进入下一页或仅重新加载实际页面都无所谓,总是超时.
>我已经在任何环境下检查过php.ini-> session.save_path设置正确,session.cookie_lifetime为0,session.gc_maxlifetime为1440
>磁盘空间很好(大于22 GB的可用空间)
>每个文件都在同一台服务器上,并且具有相同的url(最后一部分除外,它指定了表单的步骤.如下所示:
主机/一些/路径/计算->主机/某些/路径/形式->主机/某些/路径/摘要->主机/某些/路径/发送
>在计算页面上设置会话,并且超时可能在每个页面上发生(计算,表单,摘要)
>我从生产服务器上获取了php.ini,并将其带入本地工作区.更改了某些路径(扩展路径,session.save_path,tmp路径)后,它在我的本地安装上运行良好.
>协议是所有页面都一样
>重新创建会话(通过$tmp和session_destroy(),session_create())无济于事
>单前端,无负载均衡器(仅一个apache)
>会话文件以某种方式被删除
添加一些输出并重新测试后,我得到以下信息:
>我加载页面(第一步)
>我浏览表单的任何步骤(计算/表单/摘要)
>加载页面时,$_ SESSION为
数组(
‘STARTED’=> 1338298801,
‘S_SID_’=> ‘41554681145546’,
‘S_LC_’=> ‘de’,
‘version_testing’=> 1,
)
>我每三十秒重新加载一次该页面
>至少在3分钟后(也可能是30秒),我得到了超时,并且$_SESSION为:
数组(
)
>如果我在第一页上尝试此操作,则会在$_SESSION中获得一个新值,因为sessiondata为空并自动设置为新值.
>要记住:在测试/开发环境中,会话数据仍然存在,即使超时发生在20分钟之后.
>更改session.save_path首先似乎可以正常工作(会话至少持续24分钟).但是一个小时后,仍然是同样的问题.没有会话持续超过4分钟.
发现问题(但尚未解决)
今天,我可以访问生产服务器,并且发现,带有会话数据的文件夹在3-5分钟后被清理.没有文件的时间戳超过3分钟.
如前所述,PHP设置正确(GC生命周期),并且我没有找到任何Windows作业,或者类似的删除这些文件的动作.由于PHP.ini的设置正确,因此我将尝试通过数据库处理会话.
感谢帮助
解决方法:
在这种特定情况下起作用的是:
另一个网站是在同一台服务器上但在不同虚拟主机中的主机.该网站使用了一个“ init.php”,它在每次请求时都会被调用.它包含一行,将gc_maxlifetime设置为0,然后开始一个会话.因此,在某些请求下,该第二个网站随机清除了所有会话数据.
在Test and Dev上这不是问题,因为这两种环境的使用率并不高.
内容总结
以上是互联网集市为您收集整理的PHP丢失会话数据->会话文件删除太快全部内容,希望文章能够帮你解决PHP丢失会话数据->会话文件删除太快所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。