【问题标题】:Session state asp.net life span会话状态 asp.net 寿命
【发布时间】:2011-04-27 04:43:12
【问题描述】:

我已经阅读了 asp.net 会话变量,默认情况下持续 20 分钟的非活动浏览器。

如果用户退出并立即登录会发生什么?还是关闭浏览器并重新启动它?会话状态“死亡”? 如果不是 - 在每次注销或浏览器关闭时让它死掉的替代方法是什么?

谢谢

【问题讨论】:

    标签: asp.net session


    【解决方案1】:

    会话状态完全依赖于浏览器为“会话”中的每个请求提供的 cookie 的存在。当服务器接收到每个请求的 cookie 时,它​​会检查自上次请求以来是否已经过了默认的 20 分钟。

    因此,您的问题的答案:

    如果用户注销并且 立即登录?

    服务器在注销时将 cookie 标记为无效,并在重新登录时分配一个全新的 cookie

    还是关闭浏览器重新启动?

    如果会话没有过期,它不会有任何区别(因为浏览器仍然会随每个请求一起发送 cookie)

    让它在每次登出或浏览器时死掉 关门了吗?

    尽管您可以将 cookie 的过期日期设置为过去,但您不能让 cookie 死掉。您无法检测到用户关闭浏览器。

    【讨论】:

      【解决方案2】:

      会话是否保持活跃取决于两件事:

      • 会话在服务器上是否仍然存在(您的 20 分钟超时,或者您以编程方式放弃会话)
      • 如果客户端(浏览器)将会话 cookie 传输到服务器,则可以识别会话。

      会话 cookie 作为非持久性 cookie 提供,这意味着它们应由浏览器为(浏览器的)一个会话维护,因此在您关闭浏览器并重新启动浏览器后不应发送它们。但实际上,这完全取决于客户端浏览器的实现。

      这里的教训:是的,当普通用户关闭浏览器时,会话就会过期。但是你不能也不应该在任何重要的事情上依赖它。

      【讨论】:

        【解决方案3】:

        注销时,您可能需要手动清除会话。 浏览器的新实例应该有新的会话。

        【讨论】:

          【解决方案4】:

          Session.Abandon() 将刷新所有会话。当用户注销时调用它。所以每次他注销并登录时,都会创建新的会话。会话超时和关闭浏览器将自动导致下次会话。

          【讨论】:

            【解决方案5】:

            会话在 20 分钟不活动后“终止”(默认情况下),或者如果它被程序员清除。

            要清除会话,请在其上调用 Abandon 方法。在注销时执行此操作。

            没有简单的方法可以检测浏览器窗口是否关闭(例如,您可以使用 Ajax 从浏览器进行轮询),因为 Web 是无状态的。但是,如果发生这种情况(并且没有其他浏览器实例仍然打开),当用户启动一个新实例并访问您的网站时,他将获得一个新会话(尽管现有会话会一直持续到超时)。

            【讨论】:

              【解决方案6】:

              我假设您希望用户退出 - 您希望销毁会话,而不仅仅是删除会话键/值对。

              调用:

              Session.Abandon();
              

              将销毁会话。 http://msdn.microsoft.com/en-us/library/ms524310(v=vs.90).aspx

              【讨论】:

                猜你喜欢
                • 2011-09-11
                • 2011-06-07
                • 2010-11-02
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2019-10-28
                • 2011-11-12
                • 2011-10-11
                相关资源
                最近更新 更多