使用重定向销毁会话

时间:2015-04-23 17:01:42

标签: php session logout

当我点击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");
        }
?>

请你纠正我的代码并告诉我我做错了什么?

2 个答案:

答案 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 injectionuse mysqli with prepared statementsPDO 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");

?>