【问题标题】:What is the difference between Session.Abandon() and Session.Clear() in ASP.Net?ASP.Net 中的 Session.Abandon() 和 Session.Clear() 有什么区别?
【发布时间】:2011-03-02 14:10:17
【问题描述】:

ASP.Net 中Session.Abandon()Session.Clear() 有什么区别?

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/1470445/…(是的,我知道这已经晚了五年多了。我刚刚注意到其他地方的一个论坛帖子同时发布了这两个帖子。:))

标签: asp.net session session-state


【解决方案1】:

Session.Abandon() 将结束当前会话。 Session_End 将被触发,下一个请求将触发 Session_Start 事件。

Session.Clear 只会清除会话数据,会话将保持活动状态。

只要浏览器没有关闭,会话 ID 在这两种情况下都将保持不变。

简而言之:

Session.Abandon(); 取消当前的Session

Session.Clear(); 清除 Session 状态中的所有值。

【讨论】:

    【解决方案2】:
    Session.Abandon() 
    

    将销毁/杀死整个会话。

    Session.Clear()
    

    删除/清除会话数据(即当前会话中的键和值),但会话将处于活动状态。

    与 Session.Abandon() 方法相比,Session.Clear() 不会创建新会话,它只是将会话中的所有变量设置为 NULL。

    只要浏览器没有关闭,会话 ID 在这两种情况下都将保持不变。

    【讨论】:

      【解决方案3】:

      根据我的经验,这里有几点需要注意:

      Session.Abandon() 不会使当前会话无效。如果您重放旧请求,它们会执行得很好。

      但是,在你调用它之后,设置废弃会话字典的内容并没有永久的效果。下一个请求会获得一个全新的会话字典(即使您通过重放先前的请求来使用相同的会话 ID)并且您之前对其所做的任何更改(在调用该方法之后)都不存在。

      所以,Session.Abandon() 似乎完全停止了整个会话的持久性,而Session.Clear() 只删除了它的数据。

      此外,如果您需要保护您的应用程序免受重放攻击,您应该添加一些验证会话的逻辑,而不是依赖任何这些内置方法。这些似乎只用于管理会话数据的持久性,而不是用于保护您的应用程序。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-02
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-23
        • 2010-12-20
        相关资源
        最近更新 更多