我在RIA工作。我们使用memcached来存储会话,我已经安装了http://pecl.php.net/package/memcache和我的PHP会话处理程序是这样的:通过ID检查会话是否存在,而不更新会话的生存期
$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,我会中断屏幕并显示一个漂亮的重新日志以继续会话。
现在问题是与服务器端脚本。我需要确定会话是否存在,而不会延长会话的生存期(如果存在的话)。
我不能完全knowladble关于会话处理程序的工作方式,但我敢肯定,如果我这样做:
<?
session_start();
if($_SESSION['loggedin'] == "yes")
echo "true";
else
echo "false";
?>
我敢肯定,这将更新会话的寿命(上服务器端,而且在客户端通过发送一个新的cookie返回给客户端)。会议将存在不定期。
有些选项我考虑过,但不包括:
- 不要做任何服务器端调用,但在客户机上使用JavaScript的定时器(30分钟例如后到期)。当用户在多个窗口中打开RIA时,这不起作用
- 尝试绕过session_start()以防止它将新的新cookie发送回客户端。这可能适用于客户端,但过期时间仍会在内部session_handling中刷新。
我想要一些想法,T.i.a.
这不是验证,我验证每个用户页面重新加载到服务器端。我只是为了方便用户。 第一种方法是,如果我的用户在14:00登录,并且什么也不做,他的sesison将在14:30到期,但后台的JavaScript每5分钟通过AJAX调用脚本,不会在他的会话时间每次通话都要更新一次(例如14:35,14:40,14:45,14:50)。意味着他的会话将不会超时。这就是问题所在,session_start会导致会话的生存期延长。 – Kwaak 2010-06-04 12:59:57