【问题标题】:PHP - setcookie does not work until form submitted twice [duplicate]PHP - setcookie 在表单提交两次之前不起作用[重复]
【发布时间】:2014-01-15 12:06:14
【问题描述】:

在清除我的 cookie 以便我可以重新测试它之后,我尝试制作一个简单的表单来设置 cookie。然而,在输入文本表单并按下提交按钮后,它似乎设置了 cookie,但在您再次按下提交之前无法识别它(表单中没有任何内容)。听起来很奇怪,但你可以自己试试。我缩小了代码范围以使其简单。

<?php

if(isset($_GET['email'])){
    $email = $_GET['email'];
    $time = time() + 60;
    setcookie('email',$email,$time);
    $cookie = $_COOKIE['email'];
    echo 'Cookie successfully created: '.$cookie.'<br><br>';
}

if(isset($_COOKIE['email'])){

echo 'Hello there!';

}else if(!isset($_COOKIE['email'])){

echo '<form action="test.php" method="GET">
<p>Please provide your email address</p>
<input type="text" name="email" size="25" /><input type="submit" value="Submit" />
</form>';

}

?>

我缺少一些简单的东西。有什么线索吗?

【问题讨论】:

  • “一旦设置了 cookie,就可以在 在下一页加载时访问它们 ...”(强调我的)doc

标签: php forms cookies if-statement setcookie


【解决方案1】:

Cookie 仅在浏览器首次加载页面时写入浏览器。因此,第二次检查仅适用于下一页加载。

处理这个问题的最佳方法是:

<?php

if(isset($_GET['email'])){
    $email = $_GET['email'];
    $time = time() + 60;
    setcookie('email',$email,$time);
    $cookie = $_COOKIE['email'];
    echo 'Cookie successfully created: '.$cookie.'<br><br>';
}

if(isset($_COOKIE['email']) || isset($_GET['email'])){

echo 'Hello there!';

}else if(!isset($_COOKIE['email'])){

echo '<form action="test.php" method="GET">
<p>Please provide your email address</p>
<input type="text" name="email" size="25" /><input type="submit" value="Submit" />
</form>';

}

?>

首先检查设置 cookie 的 _GET 变量将允许您的脚本处理第一个和后续页面加载。

【讨论】:

  • else if 也可能更改为 else - 取决于您是否计划在最终脚本中包含任何其他条件。
  • 太棒了。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2019-11-11
  • 2019-05-22
  • 1970-01-01
  • 2016-09-20
  • 2021-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-01-09
相关资源
最近更新 更多