清除多个cookie

时间:2011-03-23 15:50:31

标签: asp.net vb.net cookies

以下代码尝试在用户退出系统后清除所有域的Cookie。出于某种原因,只清除阵列中的最后一个域。为什么会这样?我做错了吗?

例如,如果我将数组的大小更改为4,然后将for循环更改为仅转到3,那么它只会将我从y.xcv.com中注销。

作为旁注,我将此循环工作在另一台服务器上,该服务器使用稍微不同的功能来清除cookie。

编辑:根据以下建议更新代码。现在它在“as HttpCookie”系列上失败了。我需要包含一些库吗?

Dim aDomain(12)
Dim ESidCookie, WIdCookie, EBidCookie, TSidAccessCookie, PSidAccessCookie, SSidCookie As HttpCookie

aDomain(0) = ".x.com"
aDomain(1) = "y.x.com"
aDomain(2) = "y.x.com"
aDomain(3) = "y.xcv.com"
aDomain(4) = "x.com"
aDomain(5) = "y.z.a.com"
aDomain(6) = "y.z.a.com"
aDomain(7) = "z.a.com"
aDomain(8) = ""
aDomain(9) = "y.x.com"
aDomain(10) = "y.x.com" 
aDomain(11) = "y.x.com"

for count = 0 to 11
    strDomain = aDomain(count)
    response.Write count & "/" & strDomain

    ESidCookie = New HttpCookie("oneCookie")
    ESidCookie.Domain = strDomain
    ESidCookie.Path = "/"
    ESidCookie = ""
    ESidCookie.Expires = now() - 100
    Response.Cookies.Add(ESidCookie)

    WIdCookie = New HttpCookie("twoCookie")
    WIdCookie.Domain = strDomain
    WIdCookie.Path = "/"
    WIdCookie = ""
    WIdCookie.Expires = now() - 100
    Response.Cookies.Add(WIdCookie)

    EBidCookie = New HttpCookie("threeCookie")
    EBidCookie.Domain = strDomain
    EBidCookie.Path = "/"
    EBidCookie = ""
    EBidCookie.Expires = now() - 100
    Response.Cookies.Add(EBidCookie)

    TSidAccessCookie = New HttpCookie("fourCookie")
    TSidAccessCookie.Path = "/"
    TSidAccessCookie = "LoggedOut"
    Response.Cookies.Add(TSidAccessCookie)

    PSidAccessCookie = New HttpCookie("fiveCookie")
    PSidAccessCookie.Domain = strDomain
    PSidAccessCookie.Path = "/"
    PSidAccessCookie = ""
    PSidAccessCookie.Expires = now() - 100
    Response.Cookies.Add(PSidAccessCookie)

    SSidCookie = New HttpCookie("sixCookie")
    SSidCookie.Domain = strDomain
    SSidCookie.Path = "/"
    SSidCookie = ""
    SSidCookie.Expires = now() - 100
    Response.Cookies.Add(SSidCookie)
next

感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

Response.Cookies集合取决于Cookie名称,因此您每次循环时都只是更改同一个Cookie的域名。这就是最后一个获胜的原因。

您可以尝试创建一个新的Cookie对象,然后将其添加到循环中的Response.Cookies集合中。

答案 1 :(得分:0)

如果要清除所有cookie,您应该创建所有具有相同名称的新cookie。这是一个可以帮助你的基本例子:

Dim newCookie As HttpCookie
For i As Integer = 0 To 10
    ' creating a new cookie each time
    newCookie = New HttpCookie(cookieNames(i))
    ' expire the cookie
    newCookie.Expires = DateTime.Now.AddDays(-1)
    ' storing the new cookie each time
    Response.Cookies.Add(newCookie)
Next

它看起来不像您创建所有新Cookie并将其正确添加到响应中。