2011-01-09 7 views
4

私はGlobal.asaxでApplication_AuthenticateRequest()をオーバーライドして、イベントフローをよりよく理解しようとしました。私はデフォルトのMVC2アプリケーションに付属のメンバーシッププロバイダを使用しています。HttpApplicationイベントフローはどのようにメンバーシップとクッキーに関連していますか?

私はこれをしなかった場合、私は考えた:

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); 
     } 
    } 

を、ユーザがログインできますが、彼らは、ログインフォームを送信した後、ログインしていないとして、私は彼らの認証クッキーを破壊されたため、ページの読み込み時に、彼らが表示されるでしょう。

ただし、そうではありません。代わりに、ログインに成功し、ページが読み込まれたときにログインしていることが表示されます。次のページでそれらをログアウトします。

私は自分のクッキーを時間内に破棄しないと思ったので、私はそのコードを私のGlobal.asaxのApplication_BeginRequest()に入れました。それは同じ結果をもたらした。

これは私がまだ時間内にクッキーを破壊しなかったことを意味するのでしょうか、またはイベントの流れを正しく理解していませんか?

答えて

1

ここでは2つのクッキーコレクションが使用されています。 Request.Cookies and Response.Cookies

Request.Cookiesは、現在のページのブラウザから取得したCookieです。このコレクションから読み込まれるほとんどすべてのプロセス。

Response.Cookiesは、ブラウザに返されるCookieです。レスポンスクッキーのExpires値を設定すると、まずブラウザーに戻る必要があります。ブラウザーは、それが期限切れになったと判断して、次のページにクッキーがありません。

あなたはRequest.Cookiesを設定しようとすることができますが、私はそれが読み取り専用だと思います。

+0

意味があります。どうやら私は、レスポンスを送り返すとクッキーが削除されると思っていました。それは魔法のように返信されるレスポンスに劇的に影響します。ハーハー。私はそれらをログアウトするために1ページのヒットで生きることができます。つまり、Application_AuthenticateRequest()は、このようなロジックの良い場所ですか? – Sgraffite

0

FormsAuthentication.SignOut();認証されたユーザーをログアウトするのが好ましい方法です。

+0

私は現在のユーザーではないユーザーをログアウトする必要があります。それは禁止のためです。 – Sgraffite

関連する問題