【问题标题】:Reliability of ASP Session Timeout warningASP Session Timeout 警告的可靠性
【发布时间】:2011-05-02 04:21:30
【问题描述】:

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

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

这靠谱吗?

【问题讨论】:

    标签: javascript session asp-classic timeout


    【解决方案1】:

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

    【讨论】:

    • 实际上从头开始。它出现的会话 cookie 上没有设置过期时间。最好的办法是在会话上禁用滑动到期,并定期调用服务器 (AJAX) 以获取到期时间,然后显示警报。
    • @Naren 这对你有用吗? IE。禁用滑动到期。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 所以您是说如果页面进行任何异步调用,该页面的会话将被重置?然后代码会根据原始会话时间错误地告诉用户会话已过期吗?
      • PS——cookies——是不是用原生的Classic ASP方式来完成事情的?因为我使用的是开箱即​​用的 ASP。
      • 在经典 ASP 中,相当确定会话 ID 默认存储在 cookie 中。我在 ASP.NET 中工作,所以对此我不确定。是的,会话超时是一个滑动窗口,因此您使用会话发出的每个请求都会重置会话超时。
      • 只是为了确认经典 ASP 确实依赖 cookie 作为默认方法来传播会话 ID。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-20
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      相关资源
      最近更新 更多