我期待向用户发出警告时,他或她的会话超时(我有奇怪的超时问题),我发现下面的代码:ASP的可靠性会话超时警告
<%
advanceWarning = 2
jsTimeout = (session.timeout - advanceWarning) * 60000
%>
<script>
window.setTimeout("alert('Session is about to expire');",<%=jsTimeout%>);
</script>
这是可靠的?
我期待向用户发出警告时,他或她的会话超时(我有奇怪的超时问题),我发现下面的代码:ASP的可靠性会话超时警告
<%
advanceWarning = 2
jsTimeout = (session.timeout - advanceWarning) * 60000
%>
<script>
window.setTimeout("alert('Session is about to expire');",<%=jsTimeout%>);
</script>
这是可靠的?
那么,它会捕获会话在服务器上超时的情况,假设没有其他请求同时使用会话,并且cookie不会过期。
因此,如果您调用Web服务方法或使用会话的东西,则会话超时将被重置,您将不得不单独捕获。如果你的会话cookie过期(假设你这样做)小于你的超时,那么会话也可能会丢失。
在传统的ASP中,会话使用cookie进行管理。你可以在这里看到更多的文档:http://w3schools.com/asp/asp_ref_session.asp。我过去常常在那一天使用该网站。如果您想更好地控制用户的会话状态,可以直接访问cookie(通过Request.Cookies
和Response.Cookies
)。 http://w3schools.com/asp/asp_ref_response.asp。在某些情况下,这可能是一个更好的解决方案,具体取决于您试图存储多少内容以及您希望存储多长时间。如果您不希望将会话刷新为“滑动窗口”,则始终可以在会话或Cookie集合中设置时间戳变量,并以这种方式更好地控制超时。直接使用cookie的一个好处是,您可以直接使用JavaScript访问cookie,并且可以避免意大利式面条代码的情况。由于我不知道自己的最终目标,因此我无法确定这是否会对您有所帮助,但javascript window.setInterval
会创建循环函数调用,并可用于执行异步回调来监视会话状态。但是,如果你想要做的只是抛出警告alert()
,那可能是矫枉过正,现有的代码将正常工作。
如果有多个窗口打开,上面的代码将不起作用,因为您正在设置服务器的到期时间,并且仅在请求被服务的时刻有效。这将导致不同的窗口在不同的时间显示警报。定期检查一些JavaScript的cookie过期是一个好主意。
所以你说如果页面进行任何异步调用,该页面的会话将被重置?那么代码是否会错误地告诉用户会话已根据原始会话时间过期? – Caveatrob 2010-12-06 01:49:47
PS - cookies是本地传统ASP方式的事情吗?因为我使用开箱即用的ASP。 – Caveatrob 2010-12-06 01:50:06
相当确定会话ID默认存储在cookie中的经典ASP中。我在ASP.NET中工作,所以我不确定。 是的,会话超时是一个滑动窗口,因此您使用会话进行的每个请求都将重置会话超时。 – XwipeoutX 2010-12-06 02:02:07