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

时间:2010-06-11 09:32:43

标签: asp.net session session-state

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

3 个答案:

答案 0 :(得分:16)

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

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

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

简而言之:

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

Session.Clear();清除Session州的所有值。

答案 1 :(得分:1)

Session.Abandon() 

将摧毁/终止整个会话。

Session.Clear()

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

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

只要浏览器未关闭,会话ID在两种情况下都将保持相同。

答案 2 :(得分:0)

根据我的经验,有些事情需要注意:

Session.Abandon()不会使当前会话无效。如果您重播它们,旧请求就会正常执行。

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

因此,Session.Abandon()似乎完全停止了整个会话的持久性,而Session.Clear()仅删除了其数据。

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