Safari不设置Cookie但IE / FF确实如此

时间:2009-07-17 18:19:07

标签: cookies safari cross-browser

我在safari上发现了一个奇怪的cookie问题。如果您浏览http://2much.ch,您可以使用FF / IE进入并在网站内冲浪。

但是如果你使用safari,你只能输入一次;你不能在网站内冲浪。我发现Safari没有设置输入的cookie,但FF / IE确实如此。

这里有什么问题?

5 个答案:

答案 0 :(得分:62)

看起来你在这里遇到了Safari漏洞;您在同时设置cookie时将任何访问浏览器重定向到/ entry,并且Safari在遇到302 HTTP状态时忽略Set-Cookie标头:

$ curl -so /dev/null -D - http://4much.schnickschnack.info/
HTTP/1.1 302 Moved Temporarily
Server: nginx/0.7.61
Date: Sun, 19 Jul 2009 12:20:49 GMT
Content-Type: text/html;charset=utf-8
Connection: keep-alive
Content-Length: 14260
Content-Language: de
Expires: Sat, 1 Jan 2000 00:00:00 GMT
Location: http://4much.schnickschnack.info/entry
Set-Cookie: colorstyle="bright"; Path=/; Expires=1248092449.12
Set-Cookie: _ZopeId="73230900A39w5NG7q4g"; Path=/

从技术上讲,这将是Apple的基础类中的一个错误,我发现WebKit bug表明情况就是这样。

我认为解决方法是将cookie设置为不在index_html中,而是在条目中设置。

自从我第一次回答这个问题以来的这几年里,这个问题现在看来已经解决了,至少在someone tested all major browsers for Set-Cookie support on 302 redirects in 2012时适用于Safari 6。

答案 1 :(得分:7)

看起来这不再是一个问题。见http://blog.dubbelboer.com/2012/11/25/302-cookie.html

答案 2 :(得分:6)

一个月前,我遇到了这个问题。起初我以为它是一个腐败的饼干罐,因为我可以清理饼干然后去。

然而,它又出现了。这次我花了一个小时的时间浏览它,观察发送的内容,回顾一下safari发回的内容,然后我发现了问题。

在这种情况下,我在重定向之前登录后将一组cookie值发送到浏览器。这些值看起来像'用户ID','用户全名','其他ID'等等。

(是的,id是加密的,所以不用担心)

我的用户全名实际上是<lastname>, <firstname>格式。

当safari将cookie发回服务器时,删除了姓氏后面的逗号之后的所有内容。它只返回到那时的价值。

当我删除逗号时,其余值开始正常工作。

所以看来如果你发送一个包含逗号的cookie值,那么safari就无法正确地逃避它的内部存储。这让我觉得如果他们没有正确地转义逗号,那么safari的cookie处理代码可能存在一些安全问题。

顺便说一句,这是在带有safari 4.0.5的Win 7 x64上测试的。 我还在http://cookietest.livelyconsulting.com/上设置了一个网页,显示了这个确切的问题。 (我删除了该测试网站)

IE,FF和chrome都正确设置了cookie。野生动物园没有。

答案 3 :(得分:3)

我们遇到了一个非常类似的问题,Safari(v.7.0.6)会忽略cookie。 Cookie标题看起来非常精细,与 记住的另一个Cookie几乎完全相同。

事实证明,罪魁祸首是之前的 Cookie标头,其格式错误expires。 Safari对破碎的cookie标题的处理显然不如其他浏览器那样强大。

答案 4 :(得分:2)

我遇到了与Chrome相同的问题。在重定向时,Chrome不会忽略set-cookie标头,但您永远不知道顺序(首先设置cookie或首先重定向)。这是我尝试过的东西:

我有一个支持英语和法语的网站。我用这种方式实现了它(用php):

localhost有一个指向localhost / fr的链接(将cookie设置为法语并重定向到localhost)。有用。 (先设置cookie)

localhost / path1有一个指向localhost / fr?return = / path1的链接(将set-cookie设置为French并重定向到localhost / path1)。它不起作用。 (首先重定向,语言没有改变)

localhost / path1有一个指向localhost / fr?return = www.google.com的链接(将cookie设置为法语并重定向到谷歌)。当我再次回到我的网站时,它是用法语。 (这意味着不会忽略set-cookie到法语,只能在重定向后执行)

希望我说清楚,英语对我来说是一门外语。

相关问题