我有这种代码的和平,我不明白为什么它没有像我期望的那样工作。
<?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
。
这不是我期望的行为。我犯了什么错误?
答案 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');