【发布时间】:2013-04-03 16:18:31
【问题描述】:
我遇到了会话变量在大约 35-40 分钟后变为空的问题。但是,会话 ID 似乎仍显示为有效(并且与之前的数字相同)。
我创建了一些测试代码,它读取并显示会话变量,然后在增加的秒数后重新加载页面。它一直工作到 2400 秒,此时变量在下一次显示时为空。换句话说,它在两次刷新之间等待 2400 秒时始终为空。我已将 .htaccess 中的 session.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(我们需要的变量),时间(last_activity)和刷新时间为null。
有什么想法吗?
【问题讨论】:
-
另一个注意事项:我使用 vi 检查了 /tmp 目录中的 sess_ 文件。奇怪的是文件是空的(尽管 vi 给了我一个关于我没有访问权限的警告)。
标签: php linux session variables