2011-03-23 74 views
0

下面的代码尝试在用户注销系统后清除所有域的Cookie。出于某种原因,只有数组中的最后一个域被清除。为什么会发生?难道我做错了什么?清除多个Cookie

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

作为一个旁注,我有这个循环在不同的服务器上工作,它使用稍微不同的函数来清除cookie。

编辑:代码根据以下建议更新。现在它在“作为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 

任何帮助表示赞赏。谢谢!

回答

0

Response.Cookies集合被键入了cookie名称,所以您只需在每次通过循环时更改同一个cookie的域。这就是最后一个胜利的原因。

您可以尝试创建新的cookie对象,并将其添加到循环中的Response.Cookies集合中。

0

如果你想清除所有的cookies,你应该创建所有新的同名。这里有一个基本的例子,应该让你去:

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,并正确地将它们添加到响应。