在 ASP 中处于非活动状态后使用 Session.Timeout 重定向

Redirect after inactivity in ASP using Session.Timeout

本文关键字:Session Timeout 重定向 活动状态 ASP 于非      更新时间:2023-09-26

我有一个用经典ASP编写的Intranet应用程序。

每当用户处于非活动状态的时间超过会话时间时,我希望他们所在的页面重新加载,这会将他们重定向回登录页面,因为会话变量将为空。

我尝试了很多解决方案,但没有一个似乎在所有浏览器上都能可靠地工作。

IE给我带来最多的问题也就不足为奇了。

无论如何,在我的登录脚本中,我将会话超时设置为:

Session.Timeout = 15

我尝试使用元刷新标签,但在 IE(所有版本)中,有时它会起作用,有时它不会,我不知道为什么。 我会占用会话超时并添加一秒钟,如下所示:

<meta http-equiv="refresh" content="<% = CInt(Session.Timeout + 1) * 60  %>;url=/?timeout=true" />
有时

IE会进行刷新,有时它会坐在那里。 我知道会话超时,因为当浏览器不执行刷新时,如果我点击刷新,我会被定向到登录页面。

我错过了元刷新和IE有什么时髦的吗?

我尝试的第二种方法是使用 JavaScript。 由于需要为内部网应用程序启用JavaScript,因此这似乎是一个不错的选择,我实现了:

<% iTimeout = CInt((Session.Timeout * 60) + 1) * 1000 %>
<script>window_refresh = window.setTimeout(function(){window.location.href=window.location.href+"?timeout=true"},<% = iTimeout %>);</script>

现在,这可靠地重新加载了页面,但似乎服务器上的计时器和 JavaScript 在浏览器中使用的计时器都关闭了,因为有时重新加载页面时,会话仍然有效。

我尝试将+ 1更改为+60,并且在大多数情况下都有效,但即便如此,有时页面也会在会话仍然有效时刷新。

我是否正确处理了这个问题?

我肯定会通过JavaScript解决这个问题。

但是,我不会将用户重定向回登录页面,而是创建某种每隔几分钟运行的 keepalive 脚本,以确保如果用户仍在浏览器中打开页面,会话永远不会超时。
如果在您的情况下由于某种原因这不是一个可用的解决方案,我至少会记得提醒用户重定向即将发生,以避免突然

重定向完全让用户感到惊讶。

无论如何。。要回答您的问题,请执行以下操作:

您的页面是否还会加载其他资源,如图像、样式表和其他内容?

像这样的文件是在处理 HTML 后加载的,如果在加载最后一个文件之前启动 JavaScript 超时,则最终可能会遇到在会话超时启动之前启动 JavaScript 超时的情况。

在这种情况下,JavaScript 超时将在会话超时之前

触发,这使得重定向在会话超时之前发生。

说您尝试将额外秒数增加到 60,但有时仍然会出现问题。您确定在 JavaScript 超时启动后没有加载任何文件吗?我会对此进行一些调查,因为这听起来像是重置系统中的会话超时。