1

したがって、カスタム フォーム認証を使用した ASP.NET Web フォーム アプリケーションがあります。基本的には、暗号化されたユーザー名とパスワードを含む Cookie を作成し、その Cookie を使用してセッションを維持するだけです。ユーザーがログアウトすると、同じ名前の期限切れの Cookie (cookie.Expires = Now) が応答に追加されます。http://www.mydomain.com/defaulthttp://www.mydomain.com/aboutusなどの実際のページにいるときは、ログアウトに問題はありません。しかし、ユーザーがたまたまhttp://www.mydomain.comにいる場合、ログアウトは失敗します。

実際のページにドメイン (www.mydomain.com) と有効期限が含まれている場合の Cookie。しかし、www.mydomain.com の場合、その Cookie にはドメインや有効期限が含まれていません。

Fiddler からの監視: ルート ドメイン ( http://www.mydomain.com ) からのログアウト Fiddler によると:

この応答は Cookie を設定しませんでした。

フィドラー インスペクターは私の Cookie を名前で表示しますが、リクエストは 351 バイトの Cookie データを送信しました。

ASP.NET_SessionId=tdohhekwzigkpuvqbphkzyxv; DEABE_ROBTFVAN=YYpYXpVjdkNEQwcPIhLrDkN4acbigcb9Ve9QusdfsdfdMCAYka981sdfsdfsdfXxl8eBXg==;

実際のページ ( http://www.mydomain/aboutus ) からログアウトすると、62 バイトの Cookie データが送信されました。 Set-Cookie: DEABE_ROBTFVAN=; expires=Sun, 06-Oct-2013 20:14:42 GMT; path=/__utmb=142232619.22.10.1381088759; __utmc=142232619;

ログアウトをクリックしたときのルートドメインからのリクエストは次のようになります: POST / HTTP/1.1 Host: www.mydomain.com Connection: keep-alive Content-Length: 682 Accept: text/html,application/xhtml+xml,application/xml;q =0.9,image/webp, / ;q=0.8 オリジン: http://www.mydomain.com ユーザーエージェント: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/30.0. 1599.69 Safari/537.36 Content-Type: application/x-www-form-urlencoded リファラー: http://www.mydomain.com/ Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: ASP.NET_SessionId=0d2rmdy1w5wsiontcrml12yw; DEABE_ROBTFVAN=YYpYXpVjdkNEQwcPIhLrDkN4acbigasdasdasdcb9Ve9QuMCAYka981Xxl8eBXg==; __utma=142232619.1494664078.1381091188.1381091188.1381094343.2; __utmb=142232619.3.10.1381094343; __utmc=142232619; __utmz=142232619.1381094343.2.2.utmcsr=mydomain.com|utmccn=(紹介)|utmcmd=紹介|utmcct=

www.mydomain.com/about からログアウトするときのリクエスト: POST /About HTTP/1.1 Host: www.mydomain.com Connection: keep-alive Content-Length: 402 Accept: text/html,application/xhtml+xml,application /xml;q=0.9,image/webp, / ;q=0.8 オリジン: http://www.mydomain.com ユーザーエージェント: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML、Gecko など) Chrome/30.0.1599.69 Safari/537.36 Content-Type: application/x-www-form-urlencoded リファラー: http://www.mydomain.com/About Accept-Encoding: gzip,deflate,sdch Accept-Language: en-US,en;q=0.8 Cookie: ASP.NET_SessionId=0d2rmdy1w5wsiontcrml12yw; DEABE_ROBTFVAN=YYpYXpVjdkNEQwcPIhLrDkN4acbigcb9Ve9QuMCAYka981Xxl8eBXg==; __utma=142232619.1494664078.1381091188.1381091188.1381094343.2; __utmb=142232619.5.10.1381094343; __utmc=142232619; __utmz=142232619.1381094343.2.2.utmcsr=kazork.com|utmccn=(紹介)|utmcmd=紹介|utmcct=/admin/user/UserSearch.aspx

私のコード:

 Public Sub Logout()

        GlobalFunctions.AddCookieToResponse(Nothing, Nothing, True)

        HttpContext.Current.Session("AP_CurrentUser") = Nothing
        HttpContext.Current.Session.Abandon()

    End Sub

Public Shared Sub AddCookieToResponse(userName As String, password As String, Optional expireNow As Boolean = False)

    '====================================================================
    'Create top level domain cookie
    '====================================================================
    'Domain not being used currently, wanted to eliminate .mydomain I was seeing in the cookie
    Dim domain As String = GetDomain()

    Dim cookie As New HttpCookie(GlobalFunctions.GetCookieName())

    'If GlobalFunctions.HasData(domain) Then
    '    cookie.Domain = domain
    'End If

    If GlobalFunctions.HasData(userName) And GlobalFunctions.HasData(password) Then
        cookie.Value = GlobalFunctions.Encrypt(userName & ":" & password)
    End If

    If expireNow Then
        cookie.Expires = Now
    Else
        cookie.Expires = DateTime.Now.AddDays(1)
    End If

    HttpContext.Current.Response.Cookies.Add(cookie)
    '====================================================================

End Sub

Public Shared Function GetCookieName() As String
    If GetCurrentWebsiteName() = Constants.WEBSITES.MyWebsite1 Then
        Return "DEABE_ROBTFVAN"
    Else
        Return "ABE_OPED_JDZRK"
    End If
End Function

動作する場合の応答トラフィック: (成功したログアウトで 2 つの応答があります

HTTP/1.1 302 Found Cache-Control: private,600 Content-Type: text/html; charset=utf-8 場所: /Default サーバー: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 Set-Cookie: DEABE_ROBTFVAN=; expires=Wed, 23-Oct-2013 05:57:45 GMT; path=/ Set-Cookie: OAUTHDEABE_ROBTFVAN=; ドメイン=www.mydomain.com; expires=Wed, 23-Oct-2013 05:57:45 GMT; path=/ X-Powered-By: ASP.NET Date: Wed, 23 Oct 2013 05:57:45 GMT Content-Length: 125

<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Default">here</a>.</h2>
</body></html>

ログアウトが成功した応答 2 HTTP/1.1 200 OK Cache-Control: private,600 Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Vary: Accept-Encoding Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Wed, 23 Oct 2013 06:23 :03 GMT コンテンツの長さ: 7710

�������� I�%&/m�{J�J��t��$ؐ@������iG#)�*��eVe]f@�흼��{���{���;�N'���?\fdl ��J�ɞ!���?~|?"~��7N��O�

* FIDDLER: RawDisplay が 128 文字で切り捨てられました。切り捨てを無効にするには、右クリックします。*

応答トラフィック ルート ドメインでのログアウトが機能しない場合:

HTTP/1.1 200 OK Cache-Control: private,600 Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Vary: Accept-Encoding Server: Microsoft-IIS/7.5 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET Date: Wed, 23 Oct 2013 06:12 :25 GMT コンテンツの長さ: 8274

�������� I�%&/m�{J�J��t��$ؐ@������iG#)�*��eVe]f@�흼��{���{���;�N'���?\fdl ��J�ɞ!���?~|?"~��7N��O�

* FIDDLER: RawDisplay が 128 文字で切り捨てられました。切り捨てを無効にするには、右クリックします。*

4

3 に答える 3

0

同じ名前の別の Cookie があるようです。これは、すべての Cookie が同じ方法で作成されていない場合に発生する可能性があります。パスを指定しない場合、Cookie はページに対して相対的になります。

于 2013-10-22T20:17:14.807 に答える
0

まず、有効期限を過去の日付に設定してみてください

cookie.Expires = DateTime.Now.AddDays( -1 );

これで問題が解決しない場合は、Cookie を発行するときに Path を設定していないことを確認してください。

それでも問題が解決しない場合は、フィドラーなどの http デバッガーを使用して何が起こるかを確認してください。デバッガーでトラフィックを確認すると、簡単に除去できます。

于 2013-10-05T13:16:36.460 に答える