-1

我这样做是为了让用户可以在登录表单上检查“记住我”,它会设置 cookie。现在,如果他们注销,它会将他们定向到 logout.php,并且应该删除 cookie。除了我收到这些错误消息外,这一切都有效。

注意:未定义索引:第 6 行 C:\xammp\htdocs\mine\logout.php 中的用户名

注意:未定义索引:第 7 行 C:\xammp\htdocs\mine\logout.php 中的密码

我的 logout.php 代码是

<?php

session_start();

if (isset($_SESSION['username'])) {
    setcookie('username', $_POST['username'], false, '/');
    setcookie('password', $_POST['password'], false, '/');
    session_destroy();
    echo "You've benn logged out. <a href='index.php'>Click here</a> to return.";
} else {
    die ('You are not logged in!');
}
4

3 回答 3

0

只需使用isset($_POST['username'])?$_POST['username']:''而不是$_POST['username']

isset($_POST['password'])?$_POST['password']:''不是$_POST['password']


请参阅:三元运算符

于 2012-04-13T01:06:38.880 回答
0

如果您的用户想要注销,他们不太可能也将他们的用户名或密码提交到注销页面,因此$_POST['username']并且$_POST['password']将为空,因此您会收到错误。

但是,您不需要知道值(实际用户名或密码)来取消设置 cookie,您只需要知道键(字面意思是“用户名”和“密码”)。

<?php
session_start();
setcookie('username', '', time()-3600, '/');
setcookie('password', '', time()-3600, '/');
session_write_close();
header("Location: /");
?>

这会将它们注销并将它们重定向到您的首页。

于 2012-04-13T01:09:10.520 回答
-1

这是因为$_POST超全局没有usernameandpassword变量。

我猜想当您从 index.php 链接到 logout.php 时,您并没有 POST 到 logout.php(因此这个调用不会有 POST 变量)。

您需要做的是将用户名和密码保存在会话中(或其他形式的持久存储):

session_start() 之后的 index.php;

if (isset($_POST['username']) && isset($_POST['password'])) {
    $_SESSION['username'] = $_POST['username'];
    $_SESSION['password'] = $_POST['password'];
}

然后在 logout.php 中,您可以使用$_SESSION超全局而不是$_POST.

顺便说一句,我真的不知道您为什么要将用户名和密码设置为 cookie,但这不是您问题的重点。

于 2012-04-13T01:12:44.847 回答