HttpApplication事件流如何与成员资格和cookie相关?

时间:2011-01-09 05:34:56

标签: c# asp.net-mvc-2 cookies asp.net-membership

我在我的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,或者我没有正确理解事件的流程?

2 个答案:

答案 0 :(得分:1)

这里使用了两个cookie集合; Request.Cookies和Response.Cookies

Request.Cookies是来自浏览器的当前页面的cookie。大部分/全部流程都是从这个集合中读取的。

Response.Cookies是将要发送回浏览器的cookie。当您在响应cookie上设置Expires值时,它首先必须返回浏览器,浏览器看到它已过期,然后下一页将没有cookie。

您可以尝试设置Request.Cookies,但我认为它是只读的。

答案 1 :(得分:0)

使用FormsAuthentication.SignOut();这是注销经过身份验证的用户的首选方式。