我陷入了$_SESSION
问题,而$_SESSION
是随机丢失数据。PHP会话数据丢失 - >会话文件被删除太快
我有一个不同页面的表单,用户有特定的时间来浏览所有页面。
因此,我在第一页上设置了一个会话变量,并在其他页面上检查它。
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');
整个系统在本地安装,开发服务器和测试服务器上工作得很好。在生产服务器上,我在不同的时间得到一个超时。它从30秒到10分钟不等。 MAX_TIMELIMIT
是20分钟。在这种情况下,$_SESSION['STARTED']
总是空的。在其他环境中,即使在20分钟后出现超时,它也可以正确设置。
产生额外的信息:
- 如果我试图达到一个新的页面,或者如果我只需重新加载实际的页面,我总是超时没关系。
- 我已经在任何环境检查
php.ini
- >session.save_path
设置正确,session.cookie_lifetime
是0和session.gc_maxlifetime
是1440 - 磁盘空间是好的(>免费22 GB)
- 每个文件是在同一台服务器上,并且具有相同url(除了最后一部分指定了窗体的步骤),看起来像这样:
host/some/path/calc - > host/some/path/form - > host/some/path/summary - > host/some /路径/发送 - 会话设置在计算页面上,并且每个页面上都可能发生超时(计算,表格,汇总)
- 我从生产服务器获得了php.ini,并将其带入我的本地工作区。更改一些路径(extensions-path,session.save_path,tmp-path)后,它在我的本地安装上运行得非常好。
- 协议是所有页面相同
- 要重新创建会话(通过
$tmp
和session_destroy()
,session_create()
)并没有帮助 - 单前端,没有负载均衡器(只是一个阿帕奇)
- 会话文件不小心删除
加入一些输出和重新测试后,我得到如下:
- 我加载页(第一步骤)
- 我经过的形式的任何步骤(计算值/形式/摘要)
当页面被加载
$_SESSION
是array ( 'STARTED' => 1338298801, 'S_SID_' => '41554681145546', 'S_LC_' => 'de', 'version_testing' => 1, )
我重装该页面每三十秒
至少3分钟(也可能是30秒)我得到超时和
$_SESSION
是后:array ( )
,如果我尝试这第一页上,我得到了
$_SESSION
一个新值,作为sessiondata是空的,全自动的新集。要记住:在测试/开发环境中,sessiondata仍然存在,即使超时发生在20分钟后。
更改session.save_path第一次似乎工作(会话持续至少24分钟)。但一小时后,仍然是同样的问题。没有会话持续4分钟以上。
发现问题(但没有解决方案还)
今天我访问生产服务器,我发现,与会话数据的文件夹中3-5分钟后清理。没有文件的时间戳超过3分钟。 如前所述,PHP设置正确(GC生命周期),我没有找到任何Windows作业,或类似的东西删除这些文件。由于PHP.ini设置正确,我将尝试通过数据库处理会话。
感谢您的帮助
确保生产服务器着手举行会议的所有设置。您正在使用托管服务器还是专用服务器? – badc0re
你如何存储你的会话?数据库,文件或memcache? – Ray
嗨, 这是一个专用的服务器。我们将会话存储在文件中,并且设置都已设置。 (据我所见) – Kelzama