我在我的Global.asax中覆盖Application_AuthenticateRequest()以尝试更好地理解事件流。我正在使用默认MVC2应用程序附带的成员资格提供程序。
我想如果我这样做了:
public void Application_AuthenticateRequest(object sender, EventArgs args)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
authCookie.Expires = System.DateTime.Now.AddDays(-1); // Set the cookie expires time in order to delete it
Response.Cookies.Add(authCookie);
}
}
用户可以登录,但在提交登录表单后加载页面时,由于我销毁了他们的身份验证cookie,他们会显示为未登录。
然而事实并非如此。相反,他们可以成功登录,并在页面加载时显示登录。他们点击的下一页将将其记录下来。
我以为我没有及时销毁他们的cookie,因此我将该代码放入Global.asax内的Application_BeginRequest()中。它产生了相同的结果。
这是否意味着我仍然没有及时销毁他们的cookie,或者我没有正确理解事件的流程?
答案 0 :(得分:1)
这里使用了两个cookie集合; Request.Cookies和Response.Cookies
Request.Cookies是来自浏览器的当前页面的cookie。大部分/全部流程都是从这个集合中读取的。
Response.Cookies是将要发送回浏览器的cookie。当您在响应cookie上设置Expires值时,它首先必须返回浏览器,浏览器看到它已过期,然后下一页将没有cookie。
您可以尝试设置Request.Cookies,但我认为它是只读的。
答案 1 :(得分:0)
使用FormsAuthentication.SignOut()
;这是注销经过身份验证的用户的首选方式。