【问题标题】:How would I use AJAX to determine if the user's session has expired and then return them to the login page?我将如何使用 AJAX 来确定用户的会话是否已过期,然后将它们返回到登录页面?
【发布时间】:2024-01-22 11:46:01
【问题描述】:

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

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

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

不使用 setTimeOut() 也可以做到这一点吗?

【问题讨论】:

标签: asp.net ajax session session-state


【解决方案1】:

如果这可以在服务器端处理的话。

只要有服务器端用户活动——页面加载、ajax 调用等,设置会话变量

Session["last_activty"]=DateTime.Now;

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

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

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

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

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

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

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

【讨论】:

    最近更新 更多