使用ajax请求检查会话是否已过期

时间:2011-08-22 10:20:05

标签: jquery ajax session

在stackoverflow上有几个这样的问题,但没有一个非常雄辩地回答:)

我希望能够在用户离开计算机20分钟时显示登录提示并允许会话超时。

  1. 一个简单的“等待20分钟然后显示提示”将无法正常工作,因为用户可能在另一个标签页中处于活动状态。
  2. 向服务器发出标准的ajax请求,以检查会话是否仍处于活动状态将基本上保持用户登录,因此不会这样做。
  3. 有没有办法向不继承当前会话标识的服务器发出ajax请求? (避免发生第2点)

    由于

3 个答案:

答案 0 :(得分:2)

为什么只有当用户在网站上发起一项他们没有权限执行的操作时才会运行ajax调用?这样,当用户第一次访问网页时,您可以使用php设置会话变量,例如:

$_SESSION['active'] = true;

当原始会话到期时,该变量将不再可用。然后,当您需要根据用户的操作检查会话是否过期时,您可以向服务器发送请求并根据会话变量是否设置来验证会话的当前状态。

答案 1 :(得分:0)

  

对服务器的标准ajax请求,以检查会话是否仍处于活动状态将基本上保持用户登录,因此不会这样做。

如果会话在20分钟后到期,请在21分钟后进行检查:)

  

有没有办法向不继承当前会话标识的服务器发出ajax请求? (避免发生第2点)

假设您使用cookie,则无法在没有cookie的情况下向服务器发送请求。但是,您可以将您的网络服务器或框架配置为不考虑特定请求/路径的cookie会话,然后检查会话有效性而不刷新它。

答案 2 :(得分:0)

有趣的问题。我相信解决方案将在于服务器端处理会话活动的方式。

如果为会话提供活动监视机制,请说一个“$ last_active”变量监视最后一个请求的时间,并在向服务器发出请求时更新它,然后相反,如果确定请求,则终止会话时间已过,无论PHP / APACHE提供的自动功能如何,这都将有助于保持活力。

然后你可以使用一个条件,比如你在你的url上包含一个“?querylogin = 1”。你可以让你的服务器端脚本检查是否存在那个GET变量,然后给出一个对AJAX的响应请求,而不更新“$ last_active”变量。我想应该这样做。