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)完成,它会降低你的整个应用程序域。 到过那里。