1

我正在尝试设置一个依赖 cookie 来识别用户的 Web 服务。有时这些是第一方 cookie,即用户在我的网站(例如 my-site.com)上收到它们;其他时候,cookie 是使用 my-site.com 提供的图像从另一个站点设置/读取的。

问题是在 IE 中(至少在 IE8 中),虽然在这两种情况下 cookie 都被正确设置和读取(持久性,而不是会话 cookie),但它们被视为 2 个单独的 cookie。即我的站点为同一用户分配了 2 个不同的 UID,并且无法为其他站点执行正确的服务。

我在我的 HTTP 响应中设置了一个 P3P 标头(没有它,第 3 方 cookie 被视为会话 cookie)。

在 Chrome 和 Mozilla 中,这可以正常工作,即当从另一个站点连接时,设置为 1 方的 cookie 作为 3 方返回,反之亦然。

编辑

这是来自 Fiddler 的 HTTP 请求/响应转储:

HTTP 请求:(第一方)

GET http://my-site.com/redirect_to?eid=100 HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, application/x-shockwave-flash, */*
Accept-Language: he-IL
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; Tablet PC 2.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: my-site.com
Cookie: uid=8943448674338503051

HTTP 响应:(第一方)

HTTP/1.1 302 FOUND
Date: Thu, 13 Jun 2013 12:22:31 GMT
Server: Apache/2.2.22 (Ubuntu)
P3P: CP="CUR CUS OUR BUS UNI NOI"
Location: http://google.com
Set-Cookie: uid=8943448674338503051; expires=Tue, 12-Jun-2018 12:22:31 GMT; Max-Age=157680000; Path=/
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 20
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8

HTTP 请求:(第 3 方)

GET http://my-site.com/pixel?eid=100 HTTP/1.1
Accept: */*
Accept-Language: he-IL
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.2; .NET4.0C; .NET4.0E; Tablet PC 2.0)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: my-site.com
Cookie: uid=6926889931739290944

HTTP 响应:(第 3 方)

HTTP/1.1 204 NO CONTENT
Date: Thu, 13 Jun 2013 12:22:12 GMT
Server: Apache/2.2.22 (Ubuntu)
P3P: CP="CUR CUS OUR BUS UNI NOI"
Content-Length: 0
Set-Cookie: uid=6926889931739290944; expires=Tue, 12-Jun-2018 12:22:12 GMT; Max-Age=157680000; Path=/
Vary: Accept-Encoding
Keep-Alive: timeout=5, max=99
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
4

0 回答 0