PHP会话变量在30分钟后为空


PHP Session variables null after about 30 minutes

我遇到一个会话变量在大约35-40分钟后变为空的问题。但是,会话ID似乎仍然显示为有效(并且与之前相同的数字)。

我创建了一些测试代码,读取和显示会话变量,然后在越来越多的秒后重新加载页面。它一直工作到2400秒,此时下一个显示的变量为空。换句话说,在刷新间隔2400秒时它总是空的。我已经安排好了会议。.htaccess中的Gc_maxlifetime设置为7800(显然是设置的,因为使用ini_get读取为7800)。

我要么错过了一些明显的东西,要么是一些严重的奇怪的东西在起作用。这简直要把我逼疯了。

这是在带有WHM的Linux VPS上。

创建测试会话的代码:
<?php
    // start session
    session_start();
    // set session value
    $_SESSION["session_memberid"] = 1234567;
    $_SESSION["session_refresh"] = 2000;
    // write file, close
    session_write_close();
    // display confirmation
    echo json_encode(array(
        '$_SESSION["session_memberid"]' => $_SESSION["session_memberid"],
        'session_id' => session_id(),
        'maxlifetime' => ini_get('session.gc_maxlifetime')
    ));
?>
读取会话的代码(自动重新加载):
<?php
// start session
session_start();
// get session id
$session_id = session_id();
// get stored memberid
$member_id = $_SESSION['session_memberid'];
$_SESSION['session_memberid'] = $member_id;
// get last activity
$lastactivity = $_SESSION["last_activity"];
// increasing refresh time
$refresh = $_SESSION["session_refresh"];
$_SESSION["session_refresh"] = $refresh + 100;
// update time
$_SESSION["last_activity"] = time();
// write file, close
session_write_close();
...
(code to display and refresh variables)

有效读取时的输出:

{"memberid":1234567,"session_id":"c9d20d4992f184f29b259ef5ccab275f","sessionpath":"'/tmp","maxlifetime":"7800","sessioncookiepath":"'/","sessioncookielifetime":"0","referrer":"","autostart":"0","cache":false,"time":1365004882,"cookie":{"lifetime":0,"path":"'/","domain":"","secure":false,"httponly":false},"refresh":2400}

无效读取时的输出显示memberid(我们需要的变量)、time (last_activity)和刷新时间为空。

任何想法?

是否可能apache用户没有在/tmp目录中写入的权限,并且会话仅在该时间段内在ram中活动?一旦从ram中删除,它将默认为文件,由于权限问题,该文件从未被写入。

事实证明,问题是php.ini在运行时没有正确地被.htaccess或ini_set中的设置覆盖,即使ini_get显示该值已被覆盖。原因尚不清楚,但有效的解决办法是简单地改变会话。php.ini.

中的Gc_maxlifetime