2011-01-09 44 views
4

我在我的Global.asax中覆盖了Application_AuthenticateRequest()以更好地理解事件流。我正在使用默认MVC2应用程序附带的成员资格提供程序。HttpApplication事件流如何与成员资格和Cookie相关联?

我想如果我这样做:

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

回答

1

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

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

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

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

+0

这是有道理的。显然,我认为在发送回应时,他们的cookie将被删除,这会奇迹般地追溯发回的响应。哈尔。我可以接受1页关闭命中注销。这就是说,是Application_AuthenticateRequest()这样的逻辑的好位置? – Sgraffite 2011-01-09 18:10:19

0

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

+0

我需要注销不是当前用户的用户,忘记提及这一点。这是为了禁止。 – Sgraffite 2011-01-09 07:43:52