代码之家  ›  专栏  ›  技术社区  ›  Caveatrob

ASP会话超时警告的可靠性

  •  1
  • Caveatrob  · 技术社区  · 15 年前

    当用户的会话超时时(我有奇怪的超时问题),我想警告用户,发现以下代码:

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

    这是可靠的吗?

    3 回复  |  直到 14 年前
        1
  •  2
  •   XwipeoutX    15 年前

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

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

        2
  •  1
  •   smartcaveman    15 年前

    在经典的ASP中,会话使用cookie进行管理。您可以在这里看到更多的文档: http://w3schools.com/asp/asp_ref_session.asp . 我以前经常使用那个网站。如果您想要更多地控制用户的会话状态,可以直接访问cookie(通过 Request.Cookies Response.Cookies ) http://w3schools.com/asp/asp_ref_response.asp . 在某些情况下,这可能是一个更好的解决方案,具体取决于您试图存储的内容数量以及您希望它保持多长时间。如果不希望将会话刷新为“滑动窗口”,则可以始终在会话或cookies集合中设置时间戳变量,并以这种方式获得对超时的更多控制。直接使用cookie的一个优点是,您可以使用javascript直接访问cookie,并且可以避免意粉代码的情况。因为我不知道你的最终目标,所以我不能确定这是否对你有帮助,但是javascript window.setInterval 创建循环函数调用,并可用于执行异步回调以监视会话状态。但是,如果你只想发出警告 alert() ,这可能是杀伤力过大,现有代码将正常工作。

        3
  •  0
  •   Naren    15 年前

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