我遇到涉及PHP会话的文件有问题。
我有以下两个php文件:
confirm_save.php
<?php
include("confirm.php");
$_SESSION = array();
$token = $_SESSION['logout'];
if ($token && $_POST['token']==$token) {
if(isset($_COOKIE["id"]) && isset($_COOKIE["user"]) && isset($_COOKIE["pass"])) {
setcookie("id", '', strtotime( '-5 days' ), '/');
setcookie("user", '', strtotime( '-5 days' ), '/');
setcookie("pass", '', strtotime( '-5 days' ), '/');
}
// Destroy the session variables
session_destroy();
/*// Double check to see if their sessions exists
if(isset($_SESSION['username'])){
header("location: message.php?msg=Error:_Logout_Failed");
} else {
header("location: index.php");
exit();
}*/
header("location: index.php");
}
else {
// log potential CSRF attack.
}
unset($_SESSION["logout"]);
?>
然后,我有 confirm.php
<?php
session_start();
$token= md5(uniqid());
$_SESSION['logout'] = $token;
?>
<html>
<body>
<form method="post" action="confirm_save.php">
<input type="hidden" name="token" value="<?php echo $token; ?>" />
Do you really want to log out?
<input type="submit" value=" Yes " />
<input type="button" value=" No " onclick="history.go(-1);" />
</form>
</body>
</html>
点击&#34;是&#34;在confirm.php中,我收到以下错误:
未定义的索引:在第4行的C:\ wamp \ www \ confirm_save.php中注销
第4行
$token = $_SESSION['logout'];
我真的不知道错误是什么。
答案 0 :(得分:3)
您通过
清空$ _SESSION$_SESSION = array();
然后尝试填充$ token
$token = $_SESSION['logout'];
没有价值。
没有理由清空$ _SESSION,也不应该定义$ token,因为你包含confirm.php,其中还包含带值的$ token
修改
不要包含confirm.php
但是:
<?php
session_start();
$token = $_SESSION['logout'];
if ($_POST['token']==$token) {
...
答案 1 :(得分:3)
在第3行,您将$_SESSION
设置为空数组,这意味着$_SESSION['logout']
不存在;
$_SESSION = array();
$token = $_SESSION['logout'];
我无法找到您想要清空数组的原因,因此您可以删除该行。
无论如何你不需要第二行。 $token
将在confirm.php中设置。