首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP - setcookie()不工作

PHP - setcookie()不工作
EN

Stack Overflow用户
提问于 2014-07-10 03:48:42
回答 3查看 33K关注 0票数 13

我有这个页面,设置一个cookie和回显出一个字符串,如果你选中一个复选框。字符串打印正确,但是cookie没有被设置,我不知道为什么。

代码语言:javascript
复制
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
<label for="checkbox">Option 1:</label>
<input type="checkbox" name="checkbox" id="checkbox"><br>
<input type="submit" name="submit" value="Submit">
</form>
  <?php
if (isset($_POST['checkbox'])) {
  setcookie("cookie", "on", time()+3600*24);
  echo "You checked the checkbox and a cookie was set with a value of:<br>";
}
else {
  setcookie("cookie", "off", time()+3600*24);
  echo "You didn't check the checkbox and a cookie was set with a value of:<br>";
}
echo $_COOKIE['cookie'];
  ?>

有人知道为什么上面的代码不能工作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-07-10 03:53:28

PHP超级全局变量在脚本启动时被填充,然后在脚本的生命周期内不再被PHP修改或触及。这意味着$_COOKIE表示在启动脚本的http请求中发送到服务器的cookie。它不会显示您在脚本生命周期内添加/更改/删除的任何cookie。这些更改只会在下一个请求中显示。

唯一的例外是$_SESSION,它在调用session_start()时被填充。

如果你需要这些值立即出现在$_COOKIE中,你必须手动添加它们,例如

代码语言:javascript
复制
setcookie('cookie', $value, ....);
$_COOKIE['cookie'] = $value;
票数 17
EN

Stack Overflow用户

发布于 2015-01-02 12:12:01

根据http://php.net/manual/en/function.setcookie.php上的PHP手册

如果在调用此函数之前存在输出,则setcookie()将失败并返回FALSE。如果setcookie()成功运行,它将返回TRUE。这并不表示用户是否接受了cookie。

换句话说,函数setcookie()不起作用,因为它在页面内。如果你想让它工作,你需要把这个函数放在页面之前,特别是在任何头文件之前。

执行此操作:

代码语言:javascript
复制
<?php
  if ( isset($_POST['checkbox']) ) {
     setcookie("cookie", "on", time()+3600*24);
     echo "You checked the checkbox and a cookie was set with a value of:<br>";
  } else {
     setcookie("cookie", "off", time()+3600*24);
     echo "You didn't check the checkbox and a cookie was set with a value of:<br>";
  }

  echo $_COOKIE['cookie'];
?>
<!doctype html>
<html>
  <head>...</head>
  <body>
      <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
         <label for="checkbox">Option 1:</label>
         <input type="checkbox" name="checkbox" id="checkbox"><br>
         <input type="submit" name="submit" value="Submit">
      </form>
  </body>
</html>
票数 9
EN

Stack Overflow用户

发布于 2014-07-10 03:49:18

在设置Cookie并发送新的页面请求之前,Cookie不会生效。这是因为cookies是随页面请求一起发送的,它们不会神奇地出现在服务器上。

您的解决方案是在设置cookie之后执行页面刷新。

代码语言:javascript
复制
// set cookie
setcookie("cookie", "off", time()+3600*24);
// not available because this cookie was not sent with the page request.
echo $_COOKIE['cookie'];
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24662580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档