【问题标题】:why the cookie value is not updated at once when i submit the form?为什么我提交表单时 cookie 值没有立即更新?
【发布时间】:2013-03-12 10:47:27
【问题描述】:

为什么我提交表单时cookie值没有立即更新?
当我提交表单时,输出的refer_id还是旧的,但是当我刷新浏览器时,它改变了,为什么不能立即改变?

<?php 
if(isset($_GET['refer_id'])){
    setcookie('refer_id',$_GET['refer_id'],time()+3600);
}
print_r($_COOKIE);
 ?>
<p>cookie refer_id:<?php echo $_COOKIE['refer_id'];?></p>
<form method="get">
    <input type="text" name="refer_id" />
    <input type="submit" value="submit" />
</form>

【问题讨论】:

  • 客户端渲染页面后才会设置cookie。提交表单,然后刷新页面,您应该会看到更新后的值。
  • 您正在读取服务器上的 cookie;当您setcookie() 时,您正在向浏览器发送更新,然后浏览器必须将其呈现给服务器。因此,当您在页面上读取它时,您正在读取已经提供给服务器的静态 $_COOKIE 值。

标签: php cookies


【解决方案1】:

想象一下:

  1. 一些客户要求您的页面。你 setcookie() 并在标题中发送。
  2. 该客户端收到该 cookie 标头,将其放入它的 cookie 存储区。
  3. 发出下一个请求时,该 cookie 会连同标头一起发送回服务器。
  4. 服务器看到那个 cookie,将其设置为超全局$_COOKIE。
  5. 您的服务器为客户端使用新的setcookie() 指令“更新”该cookie 值。
  6. 在响应之前,您读取以输出 $_COOKIE 值,仍然是最后一个 cookie 值。
  7. 浏览器接收新标头,更新该 cookie 的值,并显示内容,使用从服务器读取的旧值。

setcookie() 不会影响$_COOKIE,除非您计算往返。

冲洗,重复。

【讨论】:

  • 那么有什么方法可以让我在提交表单时立即更新 cookie 值?
  • 当你setcookie()时,你可以同时$_COOKIE['thekey'] = $thevalue;吗?
  • 但是如果我使用$_COOKIE['thekey'] = $thevalue;
  • 你设置它就像你有;除非您将该$_GET['refer_id'] 同步到相应的$_COOKIE['refer_id'],否则您不会在该服务器处理该请求期间看到该设置。要设置过期时间,请使用setcookie()。
猜你喜欢
  • 2019-12-27
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 1970-01-01
相关资源
最近更新 更多