したがって、カスタム フォーム認証を使用した ASP.NET Web フォーム アプリケーションがあります。基本的には、暗号化されたユーザー名とパスワードを含む Cookie を作成し、その Cookie を使用してセッションを維持するだけです。ユーザーがログアウトすると、同じ名前の期限切れの Cookie (cookie.Expires = Now) が応答に追加されます。http://www.mydomain.com/defaultやhttp://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 文字で切り捨てられました。切り捨てを無効にするには、右クリックします。*