2011-08-22 61 views
1

已经有几个在计算器这样的问题,但没有回答非常雄辩地:)检查会话使用Ajax请求尚未过期

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

  1. 一个简单的“等待20分钟,然后显示提示”不会工作,因为用户可能已在另一个选项卡上的网站上处于活动状态。
  2. 向服务器发送标准ajax请求,以检查会话是否仍处于活动状态将基本保持用户登录状态,因此不会执行任何操作。

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

感谢

回答

0

一个标准的AJAX请求到服务器,以检查是否会话仍处于活动状态将基本上保持用户登录,这样不会做任何。

如果会话20分钟后到期,做检查21分钟后:)

有没有一种方法,使一个Ajax请求,这并不继承当前会话标识的服务器? (以避免点2发生)

假设您使用cookie,没有办法向服务器发送没有cookie的请求。但是,您可以将Web服务器或框架配置为不针对特定请求/路径考虑Cookie会话,然后检查会话有效性而不刷新它。

+0

'然而,您可以配置您的网络服务器或框架以不考虑Cookie会话 - 当IIS管理会话时,会怎么做? – Jimbo

0

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

如果您为会话提供了一个活动监视机制,比如说一个“$ last_active”变量监视最后一次请求的时间,并在对服务器发出请求时进行更新,反之,如果一定的时间已过,这将有助于保持活力,无论PHP/APACHE提供的自动功能如何。

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

2

为什么你不运行ajax调用只有当用户在网站上启动一个动作来执行他们没有的?当允许用户第一次来到这法子网页,你可以设置一个会话变量用PHP例如:

$_SESSION['active'] = true;

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