Session.Clear()和Session.Abandon()都摆脱了会话变量.据我了解,Abandon()结束当前会话,并导致创建一个新会话,从而导致End和Start事件被触发.
在大多数情况下,最好调用Abandon(),例如将用户注销.有没有我使用Clear()的情况?是否存在很大的性能差异?
Session.Abandon()
销毁会话并触发Session_OnEnd事件.
Session.Clear()
只需从Object中删除所有值(内容).具有相同密钥的会话仍然存在.
因此,如果您使用Session.Abandon()
,则会丢失该特定会话,并且用户将获得新的会话密钥.例如,当用户注销时,您可以使用它.
使用Session.Clear()
,如果你想要用户在同一个会话中剩余的(如果你不希望用户重新登录,例如)和重置所有会话特定数据.
只有在用户注销时才使用Session.Clear()可能会造成安全漏洞.因为就Web服务器而言,会话仍然有效.然后嗅探并抓住会话ID并劫持该会话是一个相当微不足道的事情.
出于这个原因,当用户登出时,使用Session.Abandon()会更安全,更明智,因此会话被破坏,并且创建了一个新会话(即使注销UI页面是新会话的一部分,新会话中没有任何用户详细信息,并且劫持新会话将等同于拥有一个新会话,因此它将是静音).
我真不知道一个真实的例子是什么,你会使用Session.Abondon()
,Session.Clear()
.
我能理解......如果用户点击您的注销链接并将它们带到"您已经注销"页面....他们的浏览器会话仍在继续,但您想要删除会话中存储的信息.如果您放弃了会话,那么将立即为"您已经注销"页面创建一个新会话.