【问题标题】:Clear all sessions on application start在应用程序启动时清除所有会话
【发布时间】:2012-07-10 16:17:21
【问题描述】:

我注意到当我重新启动我的 ASP.Net 应用程序时,已登录用户的凭据会被记住,并且他们可能会发现他们已自动登录。
只要不携带在登录时设置的用户会话变量,这种行为就是不受欢迎的。 那么,我怎样才能“忘记”应用程序启动时的所有会话?

我发现我不能在Application_Start 事件中使用Session.Abandon()

【问题讨论】:

  • 你使用 SQL server 来存储会话吗?
  • 还是 ASP.NET 状态服务?
  • 您的会话状态是如何配置的?请在此处粘贴您的 web.config 的这一部分。
  • 您使用的是哪种会话模式?
  • 您是否在使用 Visual Studio 调试器尝试此操作,如果是这种情况,VS 有时不会停止 ASP.net 开发服务器,这可能是问题所在,只需在您的通知区域中检查并停止它

标签: c# asp.net session session-variables


【解决方案1】:

重启后Session是否存在?怎么可能?可能您正在使用会话状态服务器或 Sql 服务器。您不能在 Application_Start 事件中使用 Session.Abandon() ,因为当应用程序启动时,那时不存在会话。在 Application_End 事件中调用 Session.Clear() 或 Session.Abandon() 方法,因此当应用程序重新启动时,它必须清除所有会话..

【讨论】:

    【解决方案2】:

    在启动新会话时使用此代码,即将它添加到 Global.asax

        #region remove all cookies
    
        string[] myCookies = Request.Cookies.AllKeys;
        foreach (string cookie in myCookies)
        {
            Response.Cookies[cookie].Expires = DateTime.Now.AddDays(-1);
        }
    
        #endregion
    

    【讨论】:

      【解决方案3】:

      您必须像这样清除 cookie:

      foreach (string key in Request.Cookies.AllKeys)
      {
          HttpCookie cookie = new HttpCookie(key);
          cookie.Expires = DateTime.UtcNow.AddDays(-7);
          Response.Cookies.Add(cookie);
      }
      

      EDTI: 这样做您的所有 cookie 都将过期。浏览器将尝试删除您的所有 cookie。这将导致不记得您的用户的登录状态。

      希望这会有所帮助。

      【讨论】:

      • 这是你句子“忘记所有会话”的一部分。我从这句话中推断出你想“不记得”任何用户。这是真的吗?或者我的理解有问题?
      • 这只是忘记当前用户的会话 - 运行该会话的用户。
      【解决方案4】:

      假设您正在使用表单身份验证,这是预期的行为:即使您的应用程序已重新启动,用户仍然拥有有效的 FormsAuthentication cookie。

      如果你真的想注销它们,你只需要打电话给FormsAuthentication.SignOut

      但我会质疑这样做的必要性 - 为什么要强制用户再次输入他的凭据?如果您丢失了存储在 Session 中的状态,您可能需要重定向到主页或其他内容,但无需让用户再次登录。

      【讨论】:

        猜你喜欢
        • 2011-10-11
        • 2015-07-31
        • 1970-01-01
        • 2016-08-07
        • 1970-01-01
        • 1970-01-01
        • 2011-12-08
        • 2021-07-29
        • 1970-01-01
        相关资源
        最近更新 更多