【问题标题】:C# Clear SessionC# 清除会话
【发布时间】:2011-10-02 04:36:33
【问题描述】:

问题 #1

我想知道我应该什么时候使用:

Session.Abandon() // 当我在跟踪期间和调用它之后使用它时 - 我发现会话仍然有一个值。

我应该什么时候使用:

Session.Clear()

我应该什么时候使用每种特定的方法?


  • 一般?
  • 在我的具体情况下?

我在页面加载中检查会话是否不等于 null。如果 session 等于 null,我想清除 session 并重定向到登录页面?

我应该使用这样的东西吗:

private void initSession()
{
    Session.Clear();
    Session.Abandon();
    Response.Redirect("LoginPage.aspx");
}

【问题讨论】:

标签: c# .net asp.net session page-lifecycle


【解决方案1】:

In ASP.NET, when should I use Session.Clear() rather than Session.Abandon()?

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

Session.Clear() 只是删除所有 来自对象的值(内容)。这 具有相同密钥的会话仍然存在 活着。

所以,如果你使用 Session.Abandon(),你 失去那个特定的会话和 用户将获得一个新的会话密钥。你 例如,当用户可以使用它 退出。

如果需要,请使用 Session.Clear() 留在同一会话中的用户 (如果你不想让他重新登录 示例)并重置他的所有会话 具体数据。

What is the difference between Session.Abandon() and Session.Clear()

清除 - 删除所有键和值 来自会话状态集合。

Abandon - 移除所有对象 存储在 Session 中。如果你不 显式调用 Abandon 方法, 服务器删除这些对象并 当会话销毁会话 超时。它还引发了诸如 会话结束。

Session.Clear 可以与 把书架上的所有书都拿走, 而 Session.Abandon 更像 扔掉整个架子。

...

通常,在大多数情况下,您需要 使用 Session.Clear。您可以使用 Session.Abandon 如果你确定 用户将离开您的网站。

回到差异:

  • Abandon 引发 Session_End 请求。
  • Clear 会立即移除项目,Abandon 不会。
  • Abandon 释放 SessionState 对象及其项,以便它可以垃圾 集。
  • Clear 保留 SessionState 和与之关联的资源。

Session.Clear() or Session.Abandon() ?

当你不使用 Session.Clear() 时 想要结束会话,但宁愿 只需清除会话中的所有键 并重新初始化会话。

Session.Clear() 不会导致 Session_End 事件处理程序在您的 要执行的 Global.asax 文件。

但另一方面 Session.Abandon() 将删除 完全会话并将执行 Session_End 事件处理程序。

Session.Clear() 就像删除书籍 从书架上

Session.Abandon() 就像扔 书架本身。

问题

如果在页面加载中不等于 null,我会检查一些会话。如果其中一个等于 null 我想清除所有会话并重定向到登录页面?

回答

如果您希望用户再次登录,请使用 Session.Abandon。

【讨论】:

  • 但是在调用Session.Abandon() 之后,我发现会话仍然保持它的价值?!
【解决方案2】:

在网上找到这篇文章,与这个主题非常相关。所以在这里发帖。

ASP.NET Internals - Clearing ASP.NET Session variables

【讨论】:

    【解决方案3】:

    另一个很大的区别是 Abandon 不会立即删除项目,但是当它删除项目时,它会循环会话项目以检查它需要特别处理的 STA COM 对象。 这可能是个问题。

    在高负载下,两个(或更多)请求可能会针对同一会话发送到服务器(即具有相同会话 cookie 的两个请求)。它们的执行将被序列化,但由于 Abandon 不会同步清除项目,而是设置一个标志,因此两个请求都可以运行,并且两个请求都可以安排工作项以“稍后”清除会话。然后这两个工作项可以同时运行,并且都在检查会话对象,并且都在清除对象数组,当你有两个东西遍历一个列表并改变它时会发生什么?繁荣!而且由于这发生在 queueuserworkitem 回调中,而不是在 try/catch 中完成(感谢 MS),它会关闭您的整个应用程序域。去过那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-05
      • 2015-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 2018-07-04
      相关资源
      最近更新 更多