Safari不会设置Cookie,但是IE / FF可以

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

但是,如果您使用Safari浏览器,则只能input一次; 你不能在网站上冲浪。 我发现Safari不会设置input的cookie,但是FF / IE会。

这里有什么问题?

看起来你在这里遇到了一个Safari bug。 您在同时设置cookie的同时将任何访问的浏览器redirect到/ 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=/ 

从技术上讲,这将是苹果的基础类中的一个错误,我发现一个WebKit的错误 ,说明是这样的。

我想这个解决方法是设置cookie不是在index_html中,而是在input。

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

一个月前,我遇到了这个问题。 起初我以为这是一个损坏的cookiesjar,因为我可以清理cookies,去。

不过,它又popup来了。 这一次,我花了一个小时的时间,观察发送的内容,回顾了什么是狩猎游戏,我发现了这个问题。

在这种情况下,在redirect之前,我有一系列cookie值在login后被发送到浏览器。 这些值看起来像“用户名”,“用户全名”,“其他ID”等。

(是的,这个ID是encryption的,所以不用担心)

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

当Safari浏览器将cookie发回服务器时,姓氏后的逗号被删除。 这只是回传价值。

当我删除逗号的其余值开始工作就好了。

所以看起来,如果你发送一个包含逗号的cookie值,safari就不会正确地转义它的内部存储。 这导致我认为,如果他们不正确地转义逗号,那么safari的cookie处理代码可能存在一些安全问题。

顺便说一下,这是在Safari 7 4.0上用Win 7 x64testing的。 另外,我build立了一个网页: http : //cookietest.livelyconsulting.com/ ,它显示了这个确切的问题。 (我删除了那个testing网站)

IE浏览器,FF和铬都正确设置cookie。 Safari不会。

我们遇到了一个非常类似的问题,Safari(7.0.6)会忽略cookie。 cookie头看起来非常好,几乎相同的另一个记住的cookie。

事实certificate,罪魁祸首是以前的 cookie头有一个畸形的expires值。 Safari浏览器处理破损的Cookie标头明显不如其他浏览器那么健壮。

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

我有一个网站,支持英文和法文。 我用这种方式实现它(用PHP):

localhost有一个到localhost / fr的链接(set-cookie为法文,redirect到localhost)。 有用。 (先设置cookie)

localhost / path1有一个链接到localhost / fr?return = / path1(set-cookie to French并redirect到localhost / path1)。 它不起作用。 (首先redirect,语言没有改变)

localhost / path1有一个链接到本地​​主机/ fr?return = http://www.google.com(其中set-cookie为法语,并redirect到谷歌)。; 当我再次回到我的网站时,这是法文。 (这意味着set-cookie不会被忽略,只能在redirect后执行)

希望我明确自己,英语对我来说是一门外语。