所以我有一个带有自定义表单身份验证的 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=; 过期=周日,2013 年 10 月 6 日 20:14:42 GMT;路径=/__utmb=142232619.22.10.1381088759; __utmc=142232619;
单击注销时来自根域的请求如下所示: POST / HTTP/1.1 主机:www.mydomain.com 连接:keep-alive 内容长度:682 接受: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, like Gecko) Chrome/30.0。 1599.69 Safari/537.36 内容类型:应用程序/x-www-form-urlencoded 引用者:http ://www.mydomain.com/ 接受编码:gzip,deflate,sdch 接受语言: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 主机:www.mydomain.com 连接:keep-alive 内容长度:402 接受: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, like Gecko) Chrome/30.0.1599.69 Safari/537.36 内容类型:application/x-www-form-urlencoded 引用者:http ://www.mydomain.com/About 接受编码:gzip,deflate,sdch 接受语言: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
工作时的响应流量:(有两个成功注销的响应
HTTP/1.1 302 找到 Cache-Control: private,600 Content-Type: text/html; charset=utf-8 位置:/默认服务器:Microsoft-IIS/7.5 X-AspNet-Version:4.0.30319 Set-Cookie:DEABE_ROBTFVAN=; 到期=格林威治标准时间 2013 年 10 月 23 日星期三 05:57:45;路径=/ 设置 Cookie:OAUTHDEABE_ROBTFVAN=; 域=www.mydomain.com;到期=格林威治标准时间 2013 年 10 月 23 日星期三 05:57:45;路径=/ X-Powered-By:ASP.NET 日期:星期三,2013 年 10 月 23 日 05:57:45 GMT 内容长度:125
<html><head><title>Object moved</title></head><body>
<h2>Object moved to <a href="/Default">here</a>.</h2>
</body></html>
Repsonse 2 成功注销 HTTP/1.1 200 OK Cache-Control: private,600 Content-Type: text/html; charset=utf-8 内容编码:gzip 变化:接受编码服务器:Microsoft-IIS/7.5 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET 日期:2013 年 10 月 23 日,星期三 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 内容编码:gzip 变化:接受编码服务器:Microsoft-IIS/7.5 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET 日期:2013 年 10 月 23 日,星期三 06:12 :25 GMT 内容长度:8274
�������� I�%&/m�{J�J��t��
$ؐ@������iG#)�*��eVe]f@�흼��{���{���;�N'���?\fdl ��J�ɞ!���?~|?”~��7N��O�
* FIDDLER:RawDisplay 被截断为 128 个字符。右键单击以禁用截断。*