Php &引用;未定义索引“;错误
我这样做是为了让用户可以在登录表单上检查“记住我”,并设置cookies。现在,如果他们注销,它会将他们引导到logout.php,cookies应该被删除。除了我收到这些错误消息之外,一切都正常 注意:未定义索引:第6行C:\xammp\htdocs\mine\logout.php中的用户名 注意:未定义索引:第7行C:\xammp\htdocs\mine\logout.php中的密码 我的logout.php代码是Php &引用;未定义索引“;错误,php,Php,我这样做是为了让用户可以在登录表单上检查“记住我”,并设置cookies。现在,如果他们注销,它会将他们引导到logout.php,cookies应该被删除。除了我收到这些错误消息之外,一切都正常 注意:未定义索引:第6行C:\xammp\htdocs\mine\logout.php中的用户名 注意:未定义索引:第7行C:\xammp\htdocs\mine\logout.php中的密码 我的logout.php代码是 <?php session_start(); if (isset(
<?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!');
}
只需使用isset($\u POST['username'])?$\u POST['username']:''
而不是$\u POST['username']
和isset($\u POST['password'])?$\u POST['password']:''
而不是$\u POST['password']
请参阅:如果您的用户想要注销,他们不太可能同时将用户名或密码提交到注销页面,因此$\u POST['username']
和$\u POST['password']
将为空,因此会出现错误
但是,要取消设置cookie,您不需要知道值(实际用户名或密码),只需要知道密钥(字面上是“用户名”和“密码”)
这将使它们注销并重定向到您的frontpage。这是因为$\u POST
superglobal没有用户名和密码变量
我猜,当您从index.php链接到logout.php时,您并没有发布到logout.php(因此此调用将不包含POST变量)
您需要做的是在会话(或其他形式的持久存储)中保存用户名和密码:
session_start()之后的index.php
然后在logout.php中,您可以使用$\u会话
超全局而不是$\u POST
清除这些值
顺便说一句,我真的不知道你为什么要将用户名和密码设置为cookies,但这不是你的问题所在。这不会清除他的cookies,这是他提到的验证登录用户的方法,使用false
作为第三个参数不会清除cookie,它将被注册为0
,从而使cookie在会话结束前保持活动状态。使用过去的时间,例如time()-3600
。
<?php
session_start();
setcookie('username', '', time()-3600, '/');
setcookie('password', '', time()-3600, '/');
session_write_close();
header("Location: /");
?>
if (isset($_POST['username']) && isset($_POST['password'])) {
$_SESSION['username'] = $_POST['username'];
$_SESSION['password'] = $_POST['password'];
}