【问题标题】:How do you update a cookie in PHP?如何在 PHP 中更新 cookie?
【发布时间】:2011-06-26 23:57:00
【问题描述】:

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

如何更新现有的 cookie?

【问题讨论】:

  • 您如何确认您获得了两个 cookie?
  • 我右键单击 -> 编辑站点首选项 -> cookie (Opera),我看到很多同名的 cookie
  • 此帐户(“Cookie”)是合法创建的,只是为了发布关于 Cookie 的 2 个问题????

标签: php cookies httpcookie cakephp


【解决方案1】:

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

<strong>setcookie('cookie_name', 'cookie_value', time()+3600, '/');</strong>

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

  • $exp_time = time()+3600; /* 1 小时后过期 */
  • $exp_time = time()+86400; /* 1 天后过期 */

【讨论】:

  • 来自 PHP 文档:如果设置为 '/',则 cookie 将在整个域中可用。默认值是设置 cookie 的当前目录。
  • 为什么这不是投票答案?
【解决方案2】:

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

它有效。请务必阅读该页面中的“常见陷阱”。

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

【讨论】:

  • 但它不起作用:((set_cookie('fuuuuu', rand(0, 3434543), $exp_date);,刷新后我得到另一个同名的cookie,不同的值:|
  • 他们来自同一个域吗? www 或无 www 计数。
  • 嗯我没有设置域参数..但是cookie是从一个域的页面设置的
  • 如果他们来自同一个域,则不需要专门设置域。
  • 我们无法通过 $_COOKIE['cookie_name'] 来修改 cookie,请编辑您的答案
【解决方案3】:

确保在setcookie 调用之前没有echosetcookie 通过 header 与浏览器通信,如果你之前调用了echo,header+body 已经发送,服务器无法再通过 header 向浏览器发送setcookie。这就是为什么您可能会发现它不起作用。

在这种情况下,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

【讨论】:

    【解决方案4】:

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

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

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

      • 设置一个新值的cookie也是一样的。而不是首先“删除”原始文件
      • 如果您还在寻找,我已经找到了解决方案。使用ajax,你必须调用一个新的PHP页面,改变cookies的值并退出,在已经打开的页面中你可以读取带有新值的cookies。 PHP 无法更改和读取同一页面上的 cookie。
      猜你喜欢
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多