C#清除会话

问题#1

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

Session.Abandon() //当我在跟踪过程中使用它并调用它之后,我发现该会话仍然有一个值。

何时我应该使用:

Session.Clear()

什么时候应该使用每种特定的方法?


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

我检查页面加载中的会话是否为空。 如果会话等于null,我想清除会话并redirect到login页面?

我应该使用这样的东西:

private void initSession() { Session.Clear(); Session.Abandon(); Response.Redirect("LoginPage.aspx"); } 

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

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

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

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

使用Session.Clear(),如果你想让用户保持在同一个会话中(如果你不想让他重新login),并重置所有的会话特定数据。

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

清除 – 从会话状态集合中删除所有的键和值。

放弃 – 删除存储在会话中的所有对象。 如果不显式调用Abandon方法,则服务器将在会话超时时删除这些对象并销毁会话。 它也引发了像Session_End这样的事件。

Session.Clear可以比较从书架上删除所有的书籍,而Session.Abandon更像是扔掉整个书架。

一般来说,在大多数情况下,您需要使用Session.Clear。 如果您确定用户要离开您的网站,您可以使用Session.Abandon。

所以回到差异:

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

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

如果不想结束会话,只需清除会话中的所有键并重新初始化会话即可使用Session.Clear()。

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

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

Session.Clear()就像从书架上移除书本一样

Session.Abandon()就像扔书架本身。

我检查一些会话,如果在页面加载不等于空。 如果其中一个等于null,我想清除所有的会话,并redirect到login页面?

回答

如果您希望用户再次login,请使用Session.Abandon。

在网上find这篇文章,与这个话题非常相关。 所以张贴在这里。

ASP.NET内部 – 清除ASP.NET会话variables

另一个很大的区别是放弃不会立即删除项目,但是当它清理完成后,它会循环执行会话项目以检查需要专门处理的STA COM对象。 这可能是一个问题。

在高负载下,可能有两个(或更多)请求将其发送到同一会话的服务器(即具有相同会话cookie的两个请求)。 他们的执行将被序列化,但由于放弃不会同步清除项目,而是设置一个标志,这两个请求都可以运行,并且这两个请求都安排一个工作项目以“稍后”清除会话。 这两个工作项都可以同时运行,并且两者都在检查会话对象,并且都清除了对象数组,并且当您有两件事情在列表上迭代并更改时会发生什么? 繁荣! 而且,因为这发生在一个queueuserworkitemcallback,而不是在try / catch(谢谢MS)完成,它会降低你的整个应用程序域。 到过那里。