我有一个用经典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并且大部分时间都有效,但即使这样,有时页面会在会话仍然有效时刷新。
我是否正确地接近了这个问题?
答案 0 :(得分:2)
我肯定也会通过JavaScript解决这个问题。
但是,不是将用户重定向回登录页面,而是创建某种keepalive脚本,每隔几分钟运行一次,以确保如果用户仍然在浏览器中打开页面,则会话永远不会超时。 /> 如果在您的情况下出于某种原因这不是一个可用的解决方案,我至少应该记住提醒用户重定向即将发生,以避免突然重定向,这完全使用户感到惊讶。
无论如何..要回答你的问题:
您的网页是否还会加载其他资源,例如图片,样式表和其他内容?
在处理HTML之后加载这些文件,并且如果在加载最后一个文件之前启动JavaScript超时,则最终可能会在会话超时开始之前启动JavaScript超时。< / p>
在这种情况下,JavaScript超时将在会话超时之前触发,并使重定向在会话超时之前发生。
你说你已经尝试将额外的秒数增加到60,并且有时问题仍然存在。在启动JavaScript超时后,您确定没有加载任何文件吗?我会对此进行一些调查,因为它听起来像是在重置系统中的会话超时。