我希望能够在我的网站上跟踪用户登录和注销。
我为此写了一个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
}
}
如果这不是正确的方法,请告诉我。
答案 0 :(得分:1)
您是否在同一请求中致电FormsAuthentication.SignOut()
和httpRequest.Cookies[FormsAuthentication.FormsCookieName]
?
如果是这样,cookie仍然有效,因为SignOut()
无法使cookie在当前请求中无效。
您需要在单独的请求中测试cookie是否有效。即便如此,调用Request.IsAuthenticated
也足够了,因为您无需明确调用Cookies[FormsAuthentication.FormsCookieName]
。