C#清除会话

Any*_*are 50 .net c# asp.net session page-lifecycle

问题#1

我想知道我什么时候应该使用:

Session.Abandon() //当我在跟踪期间和调用它之后使用它时 - 我发现会话仍然有一个值.

什么时候我应该使用:

Session.Clear()

我应该何时使用每种特定方法?


  • 一般来说?
  • 在我的具体情况?

我在页面加载中检查会话是否不等于null.如果session等于null,我想清除会话并重定向到登录页面?

我应该使用这样的东西:

private void initSession()
{
    Session.Clear();
    Session.Abandon();
    Response.Redirect("LoginPage.aspx");
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*gel 94

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

Session.Abandon()销毁会话并触发Session_OnEnd事件.

Session.Clear()只删除Object中的所有值(内容).具有相同密钥的会话仍然存在.

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

如果您希望用户保持在同一会话中(如果您不希望他重新登录)并使用其重置所有会话特定数据,请使用Session.Clear().

Session.Abandon()和Session.Clear()之间的区别是什么

清除 - 从会话状态集合中删除所有键和值.

放弃 - 删除会话中存储的所有对象.如果未显式调用Abandon方法,则服务器会在会话超时时删除这些对象并销毁会话.它还引发了Session_End等事件.

可以将Session.Clear与从架子上移除所有书籍进行比较,而Session.Abandon更像是丢掉整个架子.

...

通常,在大多数情况下,您需要使用Session.Clear.如果您确定用户将要离开您的站点,您可以使用Session.Abandon.

所以回到差异:

  • 放弃引发Session_End请求.
  • 清除立即删除项目,放弃不.
  • 放弃释放SessionState对象及其项目,以便它可以进行垃圾回收.
  • Clear保持SessionState和与之关联的资源.

Session.Clear()或Session.Abandon()?

当您不想结束会话而只是清除会话中的所有密钥并重新初始化会话时,可以使用Session.Clear().

Session.Clear()不会导致Global.asax文件中的Session_End事件处理程序执行.

但另一方面,Session.Abandon()将完全删除会话并执行Session_End事件处理程序.

Session.Clear()就像从书架中删除书籍一样

Session.Abandon()就像抛出书架本身一样.

如果在页面加载中不等于null,我检查一些会话.如果其中一个等于null我想清除所有会话并重定向到登录页面?

回答

如果您希望用户再次登录,请使用Session.Abandon.