我有一个用经典 ASP 编写的 Intranet 应用程序。
每当用户处于非活动状态的时间超过会话时间时,我希望他们所在的页面重新加载,这会将他们重定向回登录页面,因为会话变量将为空。
我尝试了一堆解决方案,但似乎没有一个在所有浏览器中都能可靠地工作。
IE 给我带来的问题最多也就不足为奇了。
无论如何,在我的登录脚本中,我将会话超时设置为:
Session.Timeout = 15
我尝试使用元刷新标签,但在 IE(所有版本)中有时它会工作,有时它不会,我不知道为什么。我会采取会话超时并添加一秒钟,如下所示:
<meta http-equiv="refresh" content="<% = CInt(Session.Timeout + 1) * 60 %>;url=/?timeout=true" />
有时 IE 会进行刷新,而其他时候它会坐在那里。我知道会话超时,因为当浏览器不执行刷新时,如果我点击刷新,我会被定向到登录页面。
元刷新和我缺少的 IE 有什么奇怪的地方吗?
我尝试的第二种方法是使用 JavaScript。由于需要为 Intranet 应用程序启用 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 并且大部分时间都有效,但即便如此,有时页面会在会话仍然有效时刷新。
我是否正确处理了这个问题?