Файл обработчика работает при входе в систему, файл не найден при выходе из системы - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть один php-файл для обработки входа / выхода из системы на моем сайте. Логин работает нормально, но когда я пытаюсь выйти из системы, мне сообщают, что файл не найден на сервере.

Эта ссылка вызывает страницу для выхода из системы:

<a href="/logansarchive/admin/do.login?action=out">Sign Out</a>

Вот код в файле:

<?php
    session_start();

    if (isset($action) && $action == "out") {
        // Log out
        if (ini_get("session.use_cookies")) {
            $params = session_get_cookie_params();

            setcookie(session_name(), '', time() - 42000,
                $params["path"], $params["domain"],
                $params["secure"], $params["httponly"]
            );
        }
        session_destroy();
        header("Location: /logansarchive/admin/login.php?logged_out=1");
    }
    else {
        $username = $_REQUEST["txt_username"];
        $password = $_REQUEST["txt_password"];
        $action = $_GET["action"];

        $host = "127.0.0.1";
        $user = "root";
        $pass = "12157114";

        try {
            $dbh = new PDO("mysql:host=$host;dbname=logansarchive", $user, $pass);
            $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        }
        catch(PDOException $e) {
            echo $e->getMessage();
        }

        // Log in
        $hashed_pass = hash("sha512", $password);

        $sql = "select count(*) as count, adminid, adminname, DATE_FORMAT(lastlogin, '%W, %M %e, %Y @ %h:%i %p' ) AS lastlogin from admin where adminname = :name and adminpass = :pass";
        $result = $dbh->prepare($sql);

        $result->bindParam(":name", $username);
        $result->bindParam(":pass", $hashed_pass);

        $stmt = $result->execute();
        $row = $result->fetch();
        if ($row["count"] == 1) {
            session_start();
            $_SESSION["adminid"] = $row["adminid"];
            $_SESSION["adminname"] = $row["adminname"];
            $_SESSION["lastlogin"] = $row["lastlogin"];     

            $dbh = null;
            header("Location: /logansarchive/admin/index.php");
        }
        else {
            $dbh = null;
            header("Location: /logansarchive/admin/login.php?login_attempt=1");
        }
    };
?>

Буду очень признателен за любое объяснение этого поведения и (в идеале) способ его исправить.

Ответы [ 2 ]

1 голос
/ 25 ноября 2011

Если он работает сейчас, это связано с неправильной настройкой сервера (он называется register_globals, выполните поиск по нему). $ action не следует указывать в третьей строке, вы можете установить его только в своем операторе else. Переместите следующую строку чуть ниже session_start ():

$action = $_GET['action'];
1 голос
/ 25 ноября 2011

do.login не похоже на правильное имя файла php
почему бы вам не использовать login.php вместо этого?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...