如果我setcookie()
用相同的 cookie 名称调用两次,我会创建两个 cookie。
如何更新现有的 cookie?
您可以使用 setcookie() 函数更新 cookie 值,但您应该在第四个参数(即“路径”参数)中添加“/”,以防止创建另一个具有相同名称的 cookie。
IEsetcookie('cookie_name', 'cookie_value', time()+3600, '/');
第三个参数的建议到期时间:
您不能更新 cookie 本身,但是可以覆盖它。否则,这就是您要查找的内容:http: //php.net/manual/en/function.setcookie.php
有用。请务必从该页面阅读“常见陷阱”。
您也可以使用超级全局$_COOKIE['cookie_name']
来读取 cookie。
确保没有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
因此,虽然 PHP 将发送两个 Set-Cookie: 标头(如果有指示),但只有最后一个应保留在浏览器中。
Netscape cookie 规范http://curl.haxx.se/rfc/cookie_spec.html说:
相同路径和名称的实例将相互覆盖,最新的实例优先。相同路径但名称不同的实例将添加额外的映射。
但是,避免这种边缘条件可能是可取的。重组您的应用程序,使其不需要覆盖已发送的 cookie。
调用 COOKIE 并删除用户名值 SETCOOKIE("username",'',0,"/");