当前位置:  开发笔记 > 后端 > 正文

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

如何解决《在ASP.NET中,何时应该使用Session.Clear()而不是Session.Abandon()?》经验,为你挑选了3个好方法。

Session.Clear()和Session.Abandon()都摆脱了会话变量.据我了解,Abandon()结束当前会话,并导致创建一个新会话,从而导致End和Start事件被触发.

在大多数情况下,最好调用Abandon(),例如将用户注销.有没有我使用Clear()的情况?是否存在很大的性能差异?



1> splattne..:

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

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

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

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


@Bibhu:他怎么建议RemoveAll()比Clear()更好?我在他的回答中看到的是RemoveAll()调用Clear(),并且在功能上看起来相同.

2> shabbirh..:

只有在用户注销时才使用Session.Clear()可能会造成安全漏洞.因为就Web服务器而言,会话仍然有效.然后嗅探并抓住会话ID并劫持该会话是一个相当微不足道的事情.

出于这个原因,当用户登出时,使用Session.Abandon()会更安全,更明智,因此会话被破坏,并且创建了一个新会话(即使注销UI页面是新会话的一部分,新会话中没有任何用户详细信息,并且劫持新会话将等同于拥有一个新会话,因此它将是静音).


劫持空话会有什么意义?劫持者仍然必须登录,并且他们没有意外提供给新用户的数据.

3> 小智..:

我真不知道一个真实的例子是什么,你会使用Session.Abondon(),Session.Clear().

我能理解......如果用户点击您的注销链接并将它们带到"您已经注销"页面....他们的浏览器会话仍在继续,但您想要删除会话中存储的信息.如果您放弃了会话,那么将立即为"您已经注销"页面创建一个新会话.


减1:这不是答案,它是"我也是"!
推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有