我在 RIA 工作。我们使用 Memcached 来存储会话,我已经安装了http://pecl.php.net/package/memcache,我的 PHP 会话处理程序如下所示:
$session_save_path = "tcp://$host:$port?persistent=1&weight=2&timeout=2&retry_interval=10, ,tcp://$host:$port ";
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', $session_save_path);
会话超时设置为 30 分钟。在我的 RIA 中,我想通过 AJAX 定期调用服务器端脚本来检查访问者的会话是否仍然存在。如果 ajax 调用返回 false,我会关闭屏幕并显示一个漂亮的 relogbox 以继续会话。
现在问题出在服务器端脚本上。如果会话存在,我需要确定会话是否存在而不延长会话的生命周期。
我对会话处理程序的工作方式并不完全了解,但我很确定我是否会这样做:
<?
session_start();
if($_SESSION['loggedin'] == "yes")
echo "true";
else
echo "false";
?>
我很确定这会更新会话的生命周期(在服务器端,但也在客户端通过将新的 cookie 发送回客户端)。并且会话将无限存在。
我考虑过的一些选项,但被排除在外:
- 不要进行任何服务器端调用,而是在客户端上使用 javascript 计时器(例如 30 分钟后到期)。当用户在多个窗口中打开 RIA 时,这将不起作用
- 尝试破解 session_start() 以防止它向客户端发送新的新鲜 cookie。这可能适用于客户端,但到期时间仍将在内部 session_handling 处刷新。
我想要一些想法,蒂亚