ASP会话超时警告的可靠性

时间:2010-10-29 00:30:28

标签: javascript session asp-classic timeout

我希望用户在会话超时(我遇到奇怪的超时问题)时发出警告,我发现了以下代码:

<% 
advanceWarning = 2 
jsTimeout = (session.timeout - advanceWarning) * 60000 
%> 
<script> 
window.setTimeout("alert('Session is about to expire');",<%=jsTimeout%>); 
</script>

这可靠吗?

3 个答案:

答案 0 :(得分:2)

好吧,它会捕获会话在服务器上超时的情况,假设同时没有其他请求使用会话,并且cookie不会过期。

因此,如果您调用Web服务方法或使用会话的内容,则会重置会话超时,您必须单独捕获它。如果你的会话cookie到期(假设你这样做)小于你的超时,那么会话也可能会丢失。

答案 1 :(得分:1)

在传统ASP中,会话使用cookie进行管理。您可以在此处查看更多相关文档:http://w3schools.com/asp/asp_ref_session.asp。我过去经常使用那个网站。如果您想要更好地控制用户的会话状态,可以直接访问cookie(通过Request.CookiesResponse.Cookies)。 http://w3schools.com/asp/asp_ref_response.asp。在某些情况下,这可能是更好的解决方案,具体取决于您尝试存储的内容量以及您希望持续多长时间。如果您不希望将会话刷新为“滑动窗口”,则始终可以在会话或cookie集合中设置时间戳变量,并通过该方式获得对超时的更多控制。直接使用cookie的一个好处是,您可以使用javascript直接访问cookie,并可以避免意大利面条代码情况。由于我不知道你的最终目标,我不能肯定地说这对你有用,但是javascript window.setInterval会创建一个重复的函数调用,可以用来做异步回调来监控会话州。但是,如果你想要做的就是抛出一个警告alert(),这可能是过度的,现有的代码也能正常工作。

答案 2 :(得分:0)

如果您正在设置服务器的到期时间并且仅在请求服务的那一刻有效,则打开多个窗口时,上述代码将不起作用。这将导致不同的窗口在不同时间显示警报。定期用一些JavaScript检查cookie到期是一个更好的主意。