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

时间:2012-07-10 16:17:22

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

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

我发现我无法在Session.Abandon()事件中使用Application_Start

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

希望这会有所帮助。

答案 3 :(得分:0)

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

如果您确实想要注销,只需拨打FormsAuthentication.SignOut

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