2011-01-09 75 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

相關問題