ASP.Net中Session.Abandon()
和Session.Clear()
之间有什么区别?
答案 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()
仅删除了其数据。
而且,如果您需要保护您的应用程序免受重放攻击,您应该添加一些验证会话的逻辑,而不依赖于任何这些内置方法。这些似乎只是为了管理会话数据的持久性,而不是为了保护您的应用程序。