【问题标题】:Can setcookie in PHP result in multiple "Set-Cookie" headers?PHP中的setcookie会导致多个“Set-Cookie”标头吗?
【发布时间】:2011-11-16 04:42:20
【问题描述】:

我正在调试一个 Magento 系统的问题。

问题是重复的 Set-Cookie 标头,如下所示:

Set-Cookie: flimmit_session=search-0c30086b812519b006aa27ef4f37f15b-24; path=/; domain=.flimmit.com; httponly
Set-Cookie: flimmit_session=search-0c30086b812519b006aa27ef4f37f15b-24; path=/; domain=.flimmit.com; httponly

cookie 是使用 php 的 setcookie 命令设置的。我的问题是这个函数的不正确使用是否会导致重复的 Set-Cookie 标头,或者我是否必须在其他地方寻找错误...

【问题讨论】:

  • 即使这个函数使用不正确,一个双倍的cookie头不应该引起任何问题;第二个只会覆盖第一个。

标签: php cookies setcookie


【解决方案1】:

是的,使用相同的数据调用 setcookie() 两次将产生 2 个相同的 Set-Cookie: 标头。我刚刚试了一下,确实可以。

但这应该不会造成问题,cookie 将始终具有上次 setcookie() 调用定义的值...

【讨论】:

  • @Joe 阅读RFC2616 Section 4.2 的最后一段。没有什么特别说明重复的值将被后面的值覆盖,这只是浏览器处理它的方式(只是在玩它,这绝对是 IE8、FF3、Chrome 和 Safari 都处理它的方式)。作为一般规则,类似这样的任何事情都是如此 - 如果您设置相同的 GET 或 POST 参数两次,则后面的值将被 PHP 和 ASP 使用,至少。
  • @DaveRandom 我认为真正的问题是我们无法确定哪些值是后者。
  • @Ashnur 我同意你的观点。由于任何理智的 HTTP 消息解析器的行为方式,我在“响应中稍后出现的那个”的上下文中指的是“稍后”一个,但不能假设第二次调用 setcookie() 将导致在第二个Set-Cookie: 标题中“稍后”出现,也不能假设消息的接收者是理智的。所有这些都是为什么不应该依赖 cookie 来处理任何重要的事情的更多原因。这也是一个例子,说明不充分的标准是如何产生歧义的,而歧义又是如何产生混乱的。
  • Internet Explorer 11 中 10 个请求中的 1 个,最后一个 Set-cookie 不优先,而是随机的其他。解决方案是在发送头回调之前注册,header("Set-Cookie", true /*replace*/) 为第一个好的cookie,然后发送所有其他好的cookie(如果cookie名称相同,但数据不同) )。不要发送错误的 cookie。
  • 我刚刚测试了发送具有不同值和相同参数的相同 cookie。浏览器随机选择相同的 cookie 之一。这是个大问题。您应该只发送一个具有相同名称的 cookie。
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多