bac*_*oor 103 asp.net session asp.net-session
销毁会话和删除其值有什么区别?你能举一个证明这个的例子吗?
我搜索了这个问题,但没有掌握全部答案.一些答案是:
Session.Abandon() 破坏会话Session.Clear() 只删除所有值一位朋友告诉我这个:
清除会话不会取消设置会话,它仍然存在与用户相同的ID,但只是清除了值.
放弃将完全破坏会话,这意味着您需要先开始一个新会话,然后才能在该会话中为该用户存储更多值.
以下代码有效,不会抛出任何异常.
Session.Abandon();
Session["tempKey1"] = "tempValue1";
Run Code Online (Sandbox Code Playgroud)
当您放弃会话时,您(或更确切地说是用户)将获得一个新的SessionId
当我测试Session时,当我放弃会话时它不会做任何改变.
我发现一个区别:
session.Abandon()引发Session_End事件
Dmy*_*iak 140
清除 - 从会话状态集合中删除所有键和值.
放弃 - 删除会话中存储的所有对象.如果未显式调用Abandon方法,则服务器会在会话超时时删除这些对象并销毁会话.
它还引发了Session_End等事件.
可以将Session.Clear与从架子上移除所有书籍进行比较,而Session.Abandon更像是丢掉整个架子.
你说:
当我测试Session时,当我放弃会话时它不会做任何改变.
只在一个请求中执行此操作时,这是正确的.
在下一个请求中,会话将是不同的.但是可以重用会话ID,以便id保持不变.
如果您将使用Session.Clear,您将在许多请求中拥有相同的会话.
通常,在大多数情况下,您需要使用Session.Clear.
如果您确定用户将要离开您的站点,您可以使用Session.Abandon.
所以回到差异:
Han*_*ing 19
当您Abandon()进行会话时,您(或者更确切地说是用户)将获得新的SessionId(在下一个请求中).当您Clear()使用会话时,将删除所有存储的值,但SessionId保持不变.
小智 9
这有点被上面的各种回答所覆盖,但是我第一次阅读这篇文章时,我错过了一个重要的事实,这导致了我的代码中的一个小错误......
Session.Clear() 将清除所有键的值,但不会导致会话结束事件触发.
Session.Abandon()不会清除当前请求的值.如果请求另一个页面,则该值将消失.然而,放弃将抛出事件.
那么,在我的情况下(也许在你的情况下?),我需要Clear()跟随Abandon().
此代码有效,并且不会引发任何异常:
Run Code Online (Sandbox Code Playgroud)Session.Abandon(); Session["tempKey1"] = "tempValue1";
这是因为,当调用Abandon方法时,当前的Session对象排队等待删除,但直到处理完当前页面上的所有脚本命令后才真正删除。这意味着您可以在与Abandon方法调用相同的页面上访问存储在Session对象中的变量,但不能在任何后续Web页面中访问。
例如,在下面的脚本中,第三行显示值Mary。这是因为在服务器完成脚本处理之前,Session对象不会被销毁。
<%
Session.Abandon
Session("MyName") = "Mary"
Reponse.Write(Session("MyName"))
%>
Run Code Online (Sandbox Code Playgroud)
如果您在随后的网页上访问变量MyName,则该变量为空。这是因为当包含上一个示例的页面完成处理时,MyName被上一个Session对象破坏了。
| 归档时间: |
|
| 查看次数: |
104567 次 |
| 最近记录: |