在 ASP.NET 中,什么时候应该使用 Session. Clear()而不是 Session. Abandon() ?

两次会议。()和会话。放弃()去掉会话变量。据我所知,Abandon ()结束当前会话,并导致创建一个新会话,从而导致 End 和 Start 事件激发。

在大多数情况下,似乎最好调用 Abandon () ,比如将用户注销。是否存在使用 Clear ()替代的情况?性能有很大的差异吗?

118302 次浏览

Session.Abandon() 破坏会话 and the Session _ OnEnd 事件 is triggered.

Session.Clear()只是从对象的 移除所有值(内容)。具有相同键的会话仍然是活的。

因此,如果使用 Session.Abandon(),将丢失该特定会话,用户将获得一个新的会话密钥。例如,当用户注销时,您可以使用它。

如果希望用户保留在同一个会话中(例如,如果不希望用户重新登录) ,可以使用 Session.Clear(),并重置所有会话特定的数据。

我有这个问题,并尝试两者,但不得不解决删除废物像“ pageEditState”,但没有删除用户信息,以免我不得不再次查找。

public static void RemoveEverythingButUserInfo()
{
foreach (String o in HttpContext.Current.Session.Keys)
{
if (o != "UserInfoIDontWantToAskForAgain")
keys.Add(o);
}
}

只使用 Session。用户注销时 Clear ()会造成安全漏洞。因为就 Web 服务器而言,会话仍然有效。然后,嗅探、获取会话 Id 并劫持该会话就是一个相当琐碎的事情。

出于这个原因,当用户注销时,使用 Session 会更安全、更明智。放弃()以便会话被销毁,并创建一个新会话(即使注销 UI 页面将是新会话的一部分,新会话将不包含任何用户详细信息,劫持新会话将等同于拥有一个新会话,因此它将是静音的)。

如上所述,Session.Abandon会销毁会话,因此您应该在登出某人时使用它。我认为一个很好的使用 Session.Clear将是一个电子商务网站上的购物篮。这样就可以在不注销用户的情况下清除篮子。