33

如果我setcookie()用相同的 cookie 名称调用两次,我会创建两个 cookie。

如何更新现有的 cookie?

4

5 回答 5

43

您可以使用 setcookie() 函数更新 cookie 值,但您应该在第四个参数(即“路径”参数)中添加“/”,以防止创建另一个具有相同名称的 cookie。

IEsetcookie('cookie_name', 'cookie_value', time()+3600, '/');

第三个参数的建议到期时间:

  • $exp_time = time()+3600; /* 1 小时后过期 */
  • $exp_time = time()+86400; /* 1 天后过期 */
于 2013-06-24T14:43:34.853 回答
23

您不能更新 cookie 本身,但是可以覆盖它。否则,这就是您要查找的内容:http: //php.net/manual/en/function.setcookie.php

有用。请务必从该页面阅读“常见陷阱”。

您也可以使用超级全局$_COOKIE['cookie_name']来读取 cookie。

于 2011-06-27T00:04:08.267 回答
6

确保没有echo之前的setcookie呼叫。setcookie通过 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
于 2019-03-30T19:30:24.497 回答
5

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

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

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

于 2011-06-27T00:08:08.750 回答
-2

调用 COOKIE 并删除用户名值 SETCOOKIE("username",'',0,"/");

于 2015-05-21T21:16:32.660 回答