你如何用PHP更新cookie?

Coo*_*kie 23 php cookies cakephp httpcookie

如果我setcookie()使用相同的cookie名称拨打两次,我会创建两个cookie.

你如何更新现有的cookie?

Oma*_*med 28

您可以使用setcookie()函数更新cookie值,但是您应该在第4个参数中添加'/'作为'path'参数,以防止创建另一个具有相同名称的cookie.

setcookie('cookie_name', 'cookie_value', $exp_date, '/');

  • 为什么这不是投票的答案? (3认同)

Fra*_*isc 20

您无法更新cookie本身,但您可以覆盖它.否则,这就是你要找的:http://php.net/manual/en/function.setcookie.php

有用.请务必阅读该页面的"常见陷阱".

您还可以使用超级全局$_COOKIE['cookie_name']来读/写cookie.

  • 但它不起作用:((``set_cookie('fuuuuu',rand(0,3434543),$ exp_date);`,刷新后我得到另一个同名的cookie,不同的值: (7认同)
  • 我们不能用$ _COOKIE ['cookie_name']来修改cookie,编辑你的答案 (2认同)

las*_*gar 6

确保没有调用echosetcookiesetcookie通过 header 与浏览器通信,如果您echo之前调用,header+body 已经发送,服务器无法再setcookie通过 header发送到浏览器。这就是为什么您可能会看到它不起作用的原因。

在这种情况下,php 服务器日志文件报告警告中应该有如下一行:

DEFAULT: PHP Warning:  Cannot modify header information - headers already sent by (output started at /path/to/your/script.php:YY) in /path/to/your/script.php on line XX
Run Code Online (Sandbox Code Playgroud)


mar*_*rio 5

因此,虽然 PHP 会发送两个 Set-Cookie: 标头(如果有指示),但只有最后一个应该在浏览器中保持不变。
Netscape cookie 规范http://curl.haxx.se/rfc/cookie_spec.html说:

相同路径和名称的实例将相互覆盖,最新的实例优先。相同路径但不同名称的实例将添加额外的映射。

然而,避免这种边缘条件可能是可取的。重构您的应用程序,使其不需要覆盖已发送的 cookie。