4

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

我看到我不能Session.Abandon()Application_Start活动中使用。

4

4 回答 4

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
于 2012-09-21T10:52:55.033 回答
1

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

于 2012-07-10T16:36:58.800 回答
0

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

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

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

于 2012-09-21T11:14:29.920 回答
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。这将导致不记住用户的登录状态。

希望这可以帮助。

于 2012-07-10T16:25:15.107 回答