【问题标题】:Internet Explorer fails to set cookies with same nameInternet Explorer 无法设置具有相同名称的 cookie
【发布时间】:2015-07-08 02:00:42
【问题描述】:

我刚刚使用 Internet Explorer 11 启动了一个虚拟机来测试这一点。尝试在 Internet Explorer 中运行以下 php:

<?php
setcookie('mycookie', rand(), 0);
setcookie('mycookie', rand(), time() + 60);
setcookie('sessioncookie', rand());
setcookie('expirecookie', rand(), time() + 60);
  1. 使用检查器检查生成的响应 cookie。
  2. 刷新页面。在上一个请求中收到的 Cookie 应在下一个请求中发送。
  3. Internet Explorer 未能保留“mycookie”cookie 的任何记录。其他两个设置好。这似乎只发生在您设置会话 cookie,然后设置具有过期和相同名称的 cookie 时。

我似乎无法在任何其他浏览器中重现此内容。这是 HTTP 规范中的内容,但 Chrome 和 Firefox 对此很宽容?

以下是 cookie 的响应标头:

Set-Cookie: mycookie=101636679
Set-Cookie: mycookie=158533464; expires=Tue, 07-Jul-2015 17:39:03 GMT; Max-Age=10
Set-Cookie: sessioncookie=1777324234
Set-Cookie: expirecookie=1229727377; expires=Tue, 07-Jul-2015 17:39:03 GMT; Max-Age=10

请注意,如果您颠倒前两个 setcookie 指令的顺序,一切都会按预期进行:

<?php
setcookie('mycookie', rand(), time() + 60);
setcookie('mycookie', 'latest', 0);
setcookie('sessioncookie', rand());
setcookie('expirecookie', rand(), time() + 60);

这会将“mycookie”值设置为“最新”。

【问题讨论】:

  • setcookie() 基本上只是在内部进行 header() 调用。如果您尝试多次设置相同的 cookie,我不确定它是否在进行标头替换。如果没有,它实际上可能会发送多个 cookie 头,并且 IE 出于某种原因只尊重第一个遇到的,恰好是0 time delete cookie。
  • 当我检查响应时,两个标头都已设置。因此,“mycookie”有两个单独的 Set-Cookie 标头。如果确实是 IE 只尊重第一个 Set-Cookie 标头,则 cookie 应保留为会话 cookie。在 PHP 中将过期设置为 0 根本不会发送过期。我会用标题修改我的问题。我不确定为什么 IE 会完全丢弃 cookie,而不是至少在会话中保留它。

标签: php internet-explorer http cookies http-headers


【解决方案1】:

试试这个,它在 Internet Explorer 中运行良好,

setcookie("mycookie", rand(),time()+5*24*60*60 );

【讨论】:

  • 这适用于设置 cookie,但不能解决上述设置两个同名 cookie 失败的问题。
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 2020-05-17
  • 2010-10-22
  • 2015-02-19
  • 2013-03-23
  • 2013-02-16
  • 2020-08-17
相关资源
最近更新 更多