【问题标题】:Is it OK to send cookie headers directly with "header()" calls?可以直接使用“header()”调用发送 cookie 标头吗?
【发布时间】:2011-03-31 12:00:21
【问题描述】:

可以直接用header()调用发送cookie头吗?

我正在修改 PHP 中的 http cookie 机制,并希望(至少最初)尝试“原始”的东西 :)

Brad Christie's"php-how-to-stringify-array-and-store-in-cookie" 的回答假设是这样,但是是否有关于该主题的某种官方来源(或者至少是众所周知的做法)?

提前感谢您澄清主题。

[编辑:重要通知]

我发现一个有趣的事情是,调用header('Set-Cookie: ...'); 可以有效地防止任何以前随setcookie('...'); 提供的cookie 被发送,至少在我的机器上是这样(PHP 5.3.5、Apache 2.2.17、WinXP SP2)。这是功能/错误(?)还是违反 PHP 语义/规则的结果,我不知道。

分析 PHP .c 源可能会带来答案(可能应该查看 head.cheader()setcookie() 等)和 mod_php5.c(Apache 模块)文件)。

【问题讨论】:

  • 这可能违反德国法律。
  • @Álvaro G. Vicario 怎么样?太严格了?
  • 附带问题:终于有真正的 cookie 规范了吗?
  • @Alvaro 我会说 RFC 2965 是“规范”——ietf.org/rfc/rfc2965.txt
  • @mlvljr manual 表示默认情况下,对该函数的调用将替换任何先前具有相同名称的标头。这可能是它覆盖使用setcookie() 设置的任何先前值的原因。你试过header('Set-Cookie: ...', false);吗?

标签: php cookies header http-headers


【解决方案1】:

考虑到 cookie 只是 HTTP 标头,您当然可以使用 header() 函数发送它们。

但这是在重新发明轮子(您必须自己处理所有可能性),因为 PHP 提供了 setcookie() 函数。

不过,如果您想了解 cookie 的工作原理,为什么不呢?
这可能很有趣 ;-)

【讨论】:

  • 那么,这种做法是完全可以的——没有PHP等额外的处理? (我只记得发送响应头会被识别并以特殊(适当的)方式处理)
  • 在实际应用程序中使用header() 设置cookie 看起来不是一个好主意,考虑到setcookie() ;但是,作为一种学习练习,是的,重新发明轮子是完全可以的;-)
【解决方案2】:

PHP 不会在意任何一种方式。设置 cookie 只是意味着发送标头。 PHP 的站点没有涉及其他任何内容(除非您在谈论会话,但显然您不是)。您可以发送任何您想要的原始标头,PHP 不在乎。如果您发送正确的标头并且客户端在下一个请求中返回 cookie,PHP 会正确地将其解析到 $_COOKIE 数组中。仅此而已。

【讨论】:

  • 它是否记录在某处(是的,我几乎可以肯定它不是,但无论如何)?或者我应该只看 PHP 源以获得(最终)信心?
  • @mlv The manual 表示标头有两种特殊情况:Location:HTTP/ 标头。所有其他标题只是按给定的方式输出,没有副作用。恐怕这种否定的确认是你能找到的最好的。 ;-)
【解决方案3】:

绝对没问题。使用原始标头发送的正确 cookie 与通过 set_cookie() 发送的正确 cookie 没有区别。

【讨论】:

  • 似乎比我们想象的要复杂得多,我已经更新了我的问题。
【解决方案4】:

不是

请查看问题的“编辑”部分。

【讨论】:

  • ...但也看到最近@Benjamin 对这个问题的评论
猜你喜欢
  • 2010-09-28
  • 2013-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多