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

StackOverflow https://stackoverflow.com/questions/347377

两者Session.Clear()和Session.Abandon()摆脱会话变量。据我所知,放弃()结束当前会话,并且使得由此产生一个新的会话使结束和开始事件开火。

看来优选呼叫放弃()在大多数情况下,如出登录的用户。是否有场景中我会使用清除()呢?也有很大的性能差异的?

有帮助吗?

解决方案

Session.Abandon()破坏会话并在 Session_OnEnd事件被触发。

Session.Clear()只是的从对象中删除所有值(内容)。用相同的密钥对会话仍然活着。

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

使用Session.Clear(),如果你希望用户在同一个会话中剩余的(如果你不希望用户重新登录,例如)和重置所有会话特定数据。

其他提示

使用Session.Clear仅(),当用户注销时会带来安全孔。随着会期仍然有效,只要Web服务器而言。它是那么合理小事嗅探,并抓住会话ID,并劫持该会话。

由于这个原因,记录用户外出时这将是更安全,更合理的使用Session.Abandon(),从而使会话被破坏,并产生(即使注销UI页面将部分新的会话新的会话,该新的会话不会有任何的用户的详细信息在它和劫持新会话将相当于具有新的会话,因此这将是静音)。

我还不能确定一个现实世界的例子就是在那里你会使用Session.Abondon()Session.Clear()

我能理解......如果用户点击您的注销链接,你带他们到你的“你已经登出”页面....他们的浏览器会话还在继续,但要删除存储在信息该会话。如果您abondoned会话,然后一个新的会话将被创建马上为“你已经登出”页面。

Session.Abandon破坏上面,所以你应该登录有人出来时,用这个作为规定的会话。我认为,一个良好的使用Session.Clear的将是电子商务网站上购物篮。这种方式,篮地没有注销用户清零。

我有这个问题,并尝试都,却不得不满足于像“pageEditState”删除废话,但不删除用户信息,以免我要再次查找。

public static void RemoveEverythingButUserInfo()
{
    foreach (String o in HttpContext.Current.Session.Keys)
    {
        if (o != "UserInfoIDontWantToAskForAgain")
            keys.Add(o);
    }
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top