【问题标题】:Closing the browser should actually clear the session variables an ASP.net session id关闭浏览器实际上应该清除会话变量一个 ASP.net 会话 ID
【发布时间】:2008-11-13 14:15:12
【问题描述】:

我有一个 ASP.net 页面。当我关闭网页时,我需要清除会话变量。

如何处理我需要将超时保持在 20 分钟。 如果他在 20 分钟超时时间内关闭并登录任意次数

是否有清除 ASP.net 会话 ID 的可能性

【问题讨论】:

标签: asp.net session


【解决方案1】:

你不能那样做。

  1. 您不能依赖浏览器上发生的事件
  2. 服务器无法联系浏览器查看它是否处于活动状态

您无法控制最终用户的浏览器。用户可能会关闭浏览器、崩溃、断开与 Internet 的连接、禁用或崩溃 javascript 等等。或者用户可能只是输入另一个 url(然后用户可能会使用后退按钮返回您的页面,并且希望继续他/她与您的网站的会话)。

每次卸载页面都会触发 window.onbeforeunload。即使用户浏览到您网站上的另一个页面,他们也可能再次需要您的会话。

【讨论】:

    【解决方案2】:

    [编辑] 正如其他人所建议的那样,您的会话最终应该会超时,但是如果您想在超时之前关闭会话(例如清理大型会话对象)并且您可以使用 javascript...

    您可以使用window.onbeforeunload 处理程序来执行此操作,该处理程序回发到退出页面。

    function CloseSession( )
    {
        location.href = 'SignOut.aspx'; 
    }
    window.onbeforeunload = CloseSession;
    

    您也可以通过 AJAX 来实现。 SignOut.aspx 页面(或您正在使用的任何平台)应该放弃用户的会话。

    【讨论】:

    • 请做好准备,万一浏览器崩溃,它不会被调用。
    【解决方案3】:

    我认为唯一的好方法是在服务器上的会话变量上设置超时。 Web 服务器无法确定用户是否关闭了浏览器。

    Javascript 不是一个好的选择,因为您可以在客户端禁用它。

    【讨论】:

    • 不仅如此,浏览器可能会崩溃,网络连接可能会掉线等等......
    【解决方案4】:

    如果浏览器进程结束怎么办?

    Here 是个把戏

    您不应该有太多需要清理的会话变量。有关其他选项,请参阅 this 帖子。

    【讨论】:

      【解决方案5】:

      我不具体了解 ASP.Net 如何实现其会话,但 Cookie RFC 的一部分是会话 cookie(没有特定“到期”日期的)在浏览器关闭时被清除。

      肯定有一种方法可以让 ASP.Net 使用适当的会话 cookie 而不是具有固定超时的那些?

      【讨论】:

        【解决方案6】:

        你好试试这个javascript函数

        function ConfirmClose()  
        {  
        if (event.clientY < 0)  
        {  
              /* Your asynchronouse request to the page and call that function*/ 
        }  
        }
        /*now call this method on event of javascript*/      
        

        我没有尝试过,但它只是从脑海中浮现

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-07-15
          • 1970-01-01
          • 1970-01-01
          • 2021-07-07
          • 2015-10-20
          • 1970-01-01
          相关资源
          最近更新 更多