2010-10-29 66 views
1

我期待向用户发出警告时,他或她的会话超时(我有奇怪的超时问题),我发现下面的代码:ASP的可靠性会话超时警告

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

这是可靠的?

回答

2

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

因此,如果您调用Web服务方法或使用会话的东西,则会话超时将被重置,您将不得不单独捕获。如果你的会话cookie过期(假设你这样做)小于你的超时,那么会话也可能会丢失。

+0

所以你说如果页面进行任何异步调用,该页面的会话将被重置?那么代码是否会错误地告诉用户会话已根据原始会话时间过期? – Caveatrob 2010-12-06 01:49:47

+0

PS - cookies是本地传统ASP方式的事情吗?因为我使用开箱即用的ASP。 – Caveatrob 2010-12-06 01:50:06

+0

相当确定会话ID默认存储在cookie中的经典ASP中。我在ASP.NET中工作,所以我不确定。 是的,会话超时是一个滑动窗口,因此您使用会话进行的每个请求都将重置会话超时。 – XwipeoutX 2010-12-06 02:02:07

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(),那可能是矫枉过正,现有的代码将正常工作。

0

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

+0

代码示例?不知道如何去做这个... – Caveatrob 2010-12-12 22:56:43

+0

其实划伤。它出现的会话cookie没有设置过期时间。 最好的办法是在会话中禁用滑动过期,并定期调用服务器(AJAX)以获取到期时间,然后显示警报。 – Naren 2010-12-13 05:02:30

+0

@Naren为你做过这些工作吗?即禁用滑动过期。 – Jacques 2014-05-14 04:02:12