2017-11-29 6 views
0

私のサイトのユーザーログインとログアウトをトラッキングできるようにします。asp.net:FormsAuthentication.SignOut()は認証クッキーをクリアしません

私はそのためにhttpモジュールを作成しました。

私はログインに問題はありません。ログアウトは、しかし、私は問題を抱えています。

私の最初の考えは、Application_EndRequestハンドラ内のクッキーの破壊をチェックすることでした。 FormsAuthentication.SignOut()を呼び出した後、要求Cookieコレクションに依然として認証Cookieが含まれているため、これは問題ありません。

// In Application_EndRequest 

if (httpRequest.IsAuthenticated) 
{ 
    HttpCookie authCookie = httpRequest.Cookies[FormsAuthentication.FormsCookieName]; 

    // Doesn't work. "authCookie" is always non-empty 
    if (authCookie == null || authCookie.Value == "") 
    { 
     //logout detected 
    } 
} 
else 
{ 
    HttpCookie authCookie = httpRequest.Cookies[FormsAuthentication.FormsCookieName]; 

    if (authCookie != null) 
    { 
     //login detected 
    } 
} 

これが適切な方法でない場合は、教えてください。

答えて

1

FormsAuthentication.SignOut()httpRequest.Cookies[FormsAuthentication.FormsCookieName]を同じリクエストで呼びますか?

この場合、SignOut()は現在のリクエストでCookieを無効にできないため、クッキーは有効です。

別々のリクエストでCookieが有効かどうかをテストする必要があります。それでも、Request.IsAuthenticatedを呼び出すだけであれば、Cookies[FormsAuthentication.FormsCookieName]を明示的に呼び出す必要がないので十分です。

+0

はい、どちらも同じリクエスト内の両方を呼び出します。 別のリクエストでCookieを確認することをお勧めします。しかし、クッキーは常にnullではありませんか?ヌルクッキーは必ずしもログアウトを意味しません。匿名ユーザーには、たとえばクッキーはありません。 – Linas

+1

'別のリクエストでクッキーをチェックすることを提案しています。 '***はい。***はクッキーが常にヌルではないでしょうか?クライアントコンピュータ内のクッキーは、一度設定されると直接削除できません。ただし、有効期限は過去の日付に設定することができ、無効になります。その後、ブラウザは期限切れのクッキーを後でクリーンアップします。 'FormsAuthentication.SignOut()'を呼び出すだけで十分です。私はクッキーが削除されているかどうか心配しません。 – Win

関連する問題