PHP:if(isset($ _ COOKIE ['name']))无效

时间:2018-03-22 13:38:00

标签: php cookies

当用户键入名称时,我创建了一个输入表单。 a 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));
 }

?>

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

2 个答案:

答案 0 :(得分:3)

在将任何输出发送到浏览器之前,必须先调用

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();

答案 1 :(得分:0)

您的代码似乎是正确的。 (除了卡洛指出的部分)

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