未设置的变量在取消之前完成

时间:2014-10-10 14:07:21

标签: php

我有这种代码的和平,我不明白为什么它没有像我期望的那样工作。

<?php
session_start();

if($_SERVER['REQUEST_METHOD'] == "POST") {
  $_SESSION['reg'] = "done";
  header("Location: " . SELF, true, 302);
}

if((isset($_SESSION['reg']) AND ($_SESSION['reg'] == "done"))) {
  unset($_SESSION['reg']);
  echo "Done";
}else{
  echo "Not done";
}
?>

POST之后,它会重定向并回显Not done,但我希望它会回显Done。如果我删除未设置的行,它可以正常工作并回显Done

这不是我期望的行为。我犯了什么错误?

2 个答案:

答案 0 :(得分:2)

标题重定向不会停止执行脚本,因此会立即执行取消设置。

在重定向

之后修复exit
<?php
session_start();

if($_SERVER['REQUEST_METHOD'] == "POST") {
  $_SESSION['reg'] = "done";
  header("Location: " . SELF, true, 302);
  exit();//<-- add this
}

if((isset($_SESSION['reg']) AND ($_SESSION['reg'] == "done"))) {
  unset($_SESSION['reg');
  echo "Done";
}else{
  echo "Not done";
}

?>

答案 1 :(得分:0)

写下此unset($_SESSION['reg']);而不是此unset($_SESSION['reg');