清除应用程序启动的所有会话

我注意到,当我重新启动ASP.Net应用程序时,记住用户的凭据会被记住,他们可能会发现它们会自动登录。
只要在登录时设置的用户会话变量未被携带,就会出现此行为。 那么,我如何“忘记”应用程序启动的所有会话?

我看到我不能在Application_Start事件中使用Session.Abandon()

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

在新会话启动时使用此代码,即将其添加到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 

你必须清除这样的cookies:

 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。这将导致你不记得用户的登录状态。

希望这可以帮助。

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

如果你真的想要注销它们,你只需要调用FormsAuthentication.SignOut

但我怀疑是否需要这样做 – 为什么强迫用户再次输入他的凭据? 如果您丢失了存储在Session中的状态,则可能需要重定向到主页或其他内容,但不需要让用户再次登录。