【发布时间】:2013-09-22 09:59:47
【问题描述】:
我有一个用经典 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,并且大多数情况下都可以,但即便如此,有时页面会在会话仍然有效时刷新。
我是否正确地处理了这个问题?
【问题讨论】:
标签: javascript jquery session asp-classic timeout