【问题标题】:PHP: if(isset($_COOKIE['name'])) not workingPHP: if(isset($_COOKIE['name'])) 不工作
【发布时间】:2018-08-31 23:30:44
【问题描述】:

当用户输入名称时,我制作了一个输入表单。 isset($_COOKIE) 检查制作的 cookie 是否已经存在。 如果 cookie 存在,您将收到一条消息:欢迎回来。 如果不是,您会收到消息:这是您第一次来这里。 但不知何故,我总是会收到欢迎消息。

这是我的代码:

<?php 
 if(!empty($_POST)) 
 {
    header("Location:form_data.php");
    setcookie('name',$_POST['name'], time() + (86400 * 30));
 }
 if(isset($_COOKIE['name']))
 {
   echo "Welcome back ".$_COOKIE['name'];
 }else
 {
    echo "hello ".$_COOKIE['name']; echo " this is your first time here.";
    setcookie('name',$_POST['name'], time() + (86400 * 30));
 }

?>

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 您在检查 cookie 是否存在之前设置 cookie,因此它会一直存在。

标签: php cookies


【解决方案1】:

setcookie() 必须在任何输出发送到浏览器之前调用。否则会导致报头错误。

在您的代码中:

更改自:

 echo "hello ".$_POST['name']; echo " this is your first time here.";
 setcookie('name',$_COOKIE['name'], time() + (86400 * 30));

收件人:

  setcookie('name',$_POST['name'], time() + (86400 * 30));
  echo "hello ".$_POST['name']; echo " this is your first time here.";

所以 header() 重定向后不会执行其他代码,您应该将 exit() 附加到它:

所以也要改变:

header("Location:form_data.php");
setcookie('name',$_POST['name'], time() + (86400 * 30));

收件人:

setcookie('name',$_POST['name'], time() + (86400 * 30));
header("Location:form_data.php"); exit();

【讨论】:

    【解决方案2】:

    您的代码似乎是正确的。 (Karlo指出的部分除外)

    1. 确保您没有发布任何内容。否则你的 cookie 已经设置好了。
    2. 确保从浏览器中删除 cookie。
    3. 确保刷新页面而不再次发送 POST 数据。所以你应该到达“这是你的第一次”部分。

    【讨论】:

      猜你喜欢
      • 2012-12-15
      • 2012-03-13
      • 1970-01-01
      • 2014-07-04
      • 2015-03-05
      • 1970-01-01
      • 2017-04-10
      • 2015-04-14
      • 1970-01-01
      相关资源
      最近更新 更多