我如何使用AJAX来确定用户的会话是否已过期,然后将其返回到登录页面?

djd*_*d87 5 asp.net ajax session session-state

在下面的scenaio中,如何使用AJAX检查会话是否仍处于活动状态,然后将用户返回到登录页面?

  1. 用户登录并开始工作
  2. 用户消失10分钟,会话超时
  3. 用户返回他们的计算机并仍然在10分钟前他们在屏幕上
  4. 用户提交他们的工作,但会返回到登录屏幕(通过我现有的会话状态检查),并且不会保留更改

理想情况下,我所追求的是每1分钟检查会话状态以查看用户是否空闲的某种方式.如果它们处于空闲状态且会话即将到期,我会暂时保存更改,然后当会话到期时,我会在用户从空闲状态返回之前自动将页面更改为登录屏幕.

是否也可以在不使用setTimeOut()的情况下执行此操作?

3Da*_*ave 4

大多数情况下这可以在服务器端处理。

每当有服务器端用户活动 - 页面加载、ajax 调用等时,设置一个会话变量

Session["last_activty"]=DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

在您的 AJAX 调用和页面加载中(可以在需要身份验证的页面的母版页/嵌套母版页中执行此操作),检查(伪代码)

if (DateTime.Now-DateTime.Parse(Session["last_activity"]) > 10 minutes)
  Session["logged_in"]=false;
Run Code Online (Sandbox Code Playgroud)

如果页面加载或者webmethod/webservice方法根据上面判断用户超时了,要么

a) 重定向到登录页面(服务器端),或者

b) 将状态代码返回给 ajax 调用者,这将导致重定向或显示登录对话框。

注意:请注意使用真实会话变量,因为它们在集群服务器环境中往往无法正常工作/根本无法工作。对于这种类型的东西来说,更好的地方是在你的数据库中。

table Users
.ID
.last_activity datetime
.logged_in - calculated column which returns if GetDate()-LastActivity > 10 minutes.
Run Code Online (Sandbox Code Playgroud)