之间的区别是什么摧毁一届会议和消除它的价值?你可以请提供例子证明这个吗?

我搜索了这个问题,但不把握总的答案。一些答案是:

  • Session.Abandon() 破坏了本届会议
  • Session.Clear() 只是删除所有价值观

一个朋友告诉我这个:

清理本届会议不会取消 该届会议上,它仍然存在的 同ID户,但与 值简单的清除。

放弃将破坏本届会议 完全的,这意味着你需要 开始新的一届会议之前你可以 存储的任何更多的价值在本届会议 对于用户。

以下代码的工作,并且不把任何例外。

Session.Abandon();
Session["tempKey1"] = "tempValue1";

当你放弃()一届会议,您(或 而不是用户)将获得一个新的 。

当我试届会议,它不使任何改变的时候我放弃了会议。

我只找到一个差异:session.Abandon() 引起了 Session_End 事件

有帮助吗?

解决方案

清楚的 -删除所有关键和价值从本届会议-国家收集。

放弃 -删除所有对象存储在一个会议。如果你不叫的放弃方法中明确、服务器中移除这些对象,并破坏了会议时的会议时间。
它还提出了事 Session_End.

会议。清晰可以比 删除所有从架子上的书, 同时会议。放弃是更多喜欢 扔掉整个架子上.

你说:

当我试届会议,它不使任何改变的时候我放弃了会议。

这是正确的,而你正在做的 内只有一个请求.
在接下来请求的会议将是不同的。但 session ID可以重复使用 所以id将保持不变。

如果你会使用的会议。显然你会同一届会议在许多请求。

通常,在大多数情况下需要使用会议。清楚的。
你可以使用的会议。放弃的如果你确定的用户是会离开你的网站。

所以回来的差异:

  1. 放弃提出了Session_End请求。
  2. 清除的项目immidiately,放弃不。
  3. 放弃放开户目的和其项目,因此它可以ba垃圾收集到免费的资源。明确的保留户和资源与它相关联。

其他提示

当你 Abandon() 一届会议,您(或相当的用户)将获得一个新Id(在下一请求)。当你 Clear() 一届会议上,所有储存的价值观被拆除,但符保持不变。

这个是 排序 为涵盖上述各种反应,但是第一次我读过这篇文章我错过了一个重要的事实,这导致了一个小错误在我的代码...

Session.Clear() 将明确的价值观所有的钥匙,但不会导致本届会议结束活动。

Session.Abandon() 会不清楚的价值观上当前的请求。如果另一个页面被请求,值将会消失的那一个。但是,放弃将引发的事件。

所以,在我的情况(也许在你的吗?), 我需要的 Clear() 随后通过 Abandon().

这个代码的工作,并且不把任何例外:

Session.Abandon();  
Session["tempKey1"] = "tempValue1";

这是因为当放弃方法是称,本届会议目的是排队等待删除,但是实际上不删除,直到所有的剧本命令于当前的页面都已处理。这意味着你可以访问的变量存储在该届会议的目的在同一页上的呼吁放弃方法,但不是在任何随后的网页。

例如,在以下的脚本中,第三线打印值玛丽。这是因为该会议的目的是不破坏,直到服务器已经完成处理该脚本。

<% 
  Session.Abandon  
  Session("MyName") = "Mary" 
  Reponse.Write(Session("MyName")) 
%>

如果你访问的可变MyName在随后的网页上,它是空的。这是因为MyName被摧毁,与上届会议对象时,该网页包含以前的例子处理完。

MSDN届会议。放弃

清除一届会议将删除的价值,被储存在那里,但是你仍然可以添加新的人那里。摧毁后的会议不能添加新的价值观。

明其删除的关键或值届会议的国家收集..

放弃其删除或删除会议目的从一届会议..

Session.Abandon() 

将会毁灭/杀了整个会议。

Session.Clear()

删除/清除届会议数据(即钥匙和价值观从本届会议),但本届会议将活着。

比较届会议。放弃()方法,会议。明()并不创造新的会议,它只是使所有的变量在本届会议空。

Session ID将仍然是同在这两种情况下,只要浏览器是不封闭的。

Session.RemoveAll()

它消除了所有关键和价值从本届会议-国家收集。

Session.Remove()

它删除一个项目从本届会议-国家收集。

Session.RemoveAt()

它删除一个项目,在一个指定的指标从本届会议-国家收集。

Session.TimeOut()

这个酒店指定的时间期限分配给本届会议对象的应用程序。(时间将定在分钟)。

如果用户没刷新或请求的一页内的时间期限,则该届会议结束。

存在。可能会导致本届会议的固定攻击这一点在PCI遵守情况。删除。并克服该届会议的固定攻击,阅读本解决方案- 如何避免本届会议的固定中的漏洞ASP.NET?.

我认为这将是方便的使用 Session.Clear() 而不是使用 Session.Abandon().

因为价值仍然存在届会之后召但后来被删除,在调用前者。

this code works and dont throw any exception:

Session.Abandon();  
Session["tempKey1"] = "tempValue1";

有一点要注意这里的会议。清除的项目立即但会议。放弃标志着本届会议被遗弃在结束目前的请求。这就意味着,假设你试图访问的价值在码刚刚结束的会议。放弃执行命令,就将仍然存在。所以不会感到困惑,如果你的代码不仅仅是工作,即使在发出会议。放弃的命令,并立即做一些逻辑的会议。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top