在ASP.NET中,什么时候应该使用Session.Clear()而不是Session.Abandon()?
Session.Clear()和Session.Abandon()都消除了会话variables。 据我了解,放弃()结束当前会话,并导致创build一个新的会话,从而导致结束和启动事件触发。
在大多数情况下,最好调用Abandon(),例如将用户login。 有没有我会使用Clear()的场景? 性能差异有多大?
Session.Abandon()
销毁会话并触发Session_OnEnd事件 。
Session.Clear()
只是删除 Object 中的所有值 (内容)。 具有相同密钥的会话仍然活着。
所以,如果你使用Session.Abandon()
,你将失去那个特定的会话,用户将得到一个新的会话密钥。 例如,当用户注销时,可以使用它。
使用Session.Clear()
,如果你想让用户保持在同一个会话中(如果你不想让用户重新login),并重置所有会话特定的数据。
只有在用户注销时使用Session.Clear()才能构成安全漏洞。 由于就Web服务器而言,会话仍然有效。 那么嗅探并获取会话标识并劫持该会话是一件相当琐碎的事情。
出于这个原因,使用Session.Abandon()会更安全,更合理地使用Session.Abandon()来销毁会话,创build一个新的会话(即使注销UI页面是新会话的一部分,新会话将没有任何用户的细节,劫持新的会话将相当于有一个新的会议,因此它将是静音)。
我仍然不确定真实世界的例子是在哪里使用Session.Abondon()
, Session.Clear()
。
我可以理解…如果用户点击你的注销链接,并把他们带到你的“你已经注销”页面….他们的浏览器会话仍在继续,但你想删除存储在会话中的信息。 如果您放弃了会话,则会立即为“您已注销”页面创build一个新会话。
Session.Abandon
如上所述破坏会话,所以你应该使用这个来logging某人。 我认为Session.Clear
一个很好的用法是在电子商务网站上购物篮。 这样篮子被清除而不用注销用户。
我有这个问题,并尝试这两个,但必须解决像“pageEditState”废话,但不能删除用户信息,以免我不得不再次查找它。
public static void RemoveEverythingButUserInfo() { foreach (String o in HttpContext.Current.Session.Keys) { if (o != "UserInfoIDontWantToAskForAgain") keys.Add(o); } }