asp.net:FormsAuthentication.SignOut()没有清除身份验证cookie

时间:2017-11-29 20:08:18

标签: asp.net cookies forms-authentication

我希望能够在我的网站上跟踪用户登录和注销。

我为此写了一个http模块。

我可以检测到登录没问题。但退出时,我遇到了麻烦。

我最初的想法是检查Application_EndRequest处理程序中cookie的销毁情况。 这没有用,因为在调用FormsAuthentication.SignOut()之后,请求cookie集合仍然包含auth cookie。

// In Application_EndRequest

if (httpRequest.IsAuthenticated) 
{
    HttpCookie authCookie = httpRequest.Cookies[FormsAuthentication.FormsCookieName];

    // Doesn't work. "authCookie" is always non-empty
    if (authCookie == null || authCookie.Value == "") 
    {
        //logout detected
    }
}
else 
{
    HttpCookie authCookie = httpRequest.Cookies[FormsAuthentication.FormsCookieName];

    if (authCookie != null) 
    {
        //login detected
    }
}

如果这不是正确的方法,请告诉我。

1 个答案:

答案 0 :(得分:1)

您是否在同一请求中致电FormsAuthentication.SignOut()httpRequest.Cookies[FormsAuthentication.FormsCookieName]

如果是这样,cookie仍然有效,因为SignOut()无法使cookie在当前请求中无效。

您需要在单独的请求中测试cookie是否有效。即便如此,调用Request.IsAuthenticated也足够了,因为您无需明确调用Cookies[FormsAuthentication.FormsCookieName]