当我点击Logout链接时,它会重定向到空白页面。
以下是Login.php
文件:
<?php
session_start();
$_SESSION['logout']= 'username';
include_once('config.php');
if(isset($_POST['btn'])) {
$username = addslashes($_POST['username']);
$password = addslashes(md5($_POST['password']));
$query = mysqli_query($connect, "SELECT * FROM register WHERE username = '$username' AND password = '$password' ")
or die(mysql_error());
$result = mysqli_fetch_array($query);
if($result['username']==$username) {
echo "You have successfully loged in <br>";
$check = true;
}else {
echo "Wrong Login or Password <br>";
}
}
?>
<a href="logout.php">Logout</a>
Logout.php
档案:
<?php
session_start();
if(isset($_POST['logout'])) {
session_destroy();
header("Location:login.html");
}
?>
请你纠正我的代码并告诉我我做错了什么?
答案 0 :(得分:1)
退出中的这一行
if(isset($_POST['logout'])) {
应该使用$_SESSION
而不是$_POST
按照
$_SESSION['logout']= 'username';
您还将MySQL API与or die(mysql_error())
混合使用,该API应为or die(mysqli_error($connect))
我注意到你使用MD5存储密码;它已经老了,被认为已经坏了。
我建议您使用CRYPT_BLOWFISH或PHP 5.5的password_hash()
功能。对于PHP&lt; 5.5使用password_hash() compatibility pack
。
另外,对于您所关注的SQL injection,use mysqli
with prepared statements或PDO with prepared statements,,它们更安全。
请参阅ircmaxell使用password_hash()
和PDO与预准备语句的解决方案:
将error reporting添加到文件的顶部,这有助于查找错误。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
旁注:错误报告应仅在暂存时完成,而不是生产。
答案 1 :(得分:0)
问题出在您的logout.php文件中,您正在侦听$ _POST。
if(isset($_POST['logout'])) { ...
但是,您只是使用href链接到退出页面
<a href="logout.php">Logout</a>
这意味着永远不会有$ _POST ['logout']因为它不是表格(而是实际链接)。
因此,因为它是一个链接,你可以删除if(isset($ _ POST ['logout'])){..并执行以下操作:
<?php
session_start();
session_destroy();
header("Location:login.html");
?>