0

PHP のログイン スクリプトに少し問題があります。ユーザーがログインすると、2 回目の試行後にのみ機能し、エラーは発生しませんが、ユーザーが最初の試行で間違ったパスワードを入力したように見えます。

サイトをテストしているときに、初めてログインしようとすると、ログイン ページに戻ることがあります。次に、ホームページの URL を手動で入力すると、時々そこに行くことができます。(ユーザーがすでにログインしているかどうかを確認するphpが上部にあるので、ログインスクリプトがSESSIONをtrueに設定することがあります)

ただし、ほとんどの場合、それは行われません。エラーメッセージを出力せずに、ログインにリダイレクトするだけです。問題はホームページの上部にあり、ログインスクリプトではないと思います.mysqlがユーザー/パスワードが一致する行を返さない場合、リダイレクトを削除した後、とにかくログインページにリダイレクトされるためです.

ここに私のログインスクリプトがあります

<?php
session_start();
// Include required MySQL configuration file and functions



// Check if user is already logged in
if (isset($_SESSION['logged_in'])) {
    // If user is already logged in, redirect to main page
    redirect('home.php');
}
else {
        // Make sure that the user submitted a username/password and username
        // only consists of alphanumeric Chars

        if ( (!isset($_POST['username'])) || (!isset($_POST['password'])) OR
             ( !ctype_alnum($_POST['username'])) ) {

                redirect('login.php');
            }

        // Connect to database

        $mysqli = @new mysqli(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);

        if (mysqli_connect_errno()) { printf ("Unable to connect to database %s",
                                        mysqli_connect_error());
                                        exit();
            }
        //Escape any unsafe characters before querying database
        $username = $mysqli->real_escape_string($_POST['username']);
        $password = $mysqli->real_escape_string($_POST['password']);

        // construct SQL statement for query & execute
        $sql = "SELECT * FROM peeps WHERE name = '" . $username . "'
                AND pword = SHA1('" . $password . "') ";

        $result = $mysqli->query($sql);

        // If one row is returned, username and password are valid.
        if ($result->num_rows == 1 ) {
            // Set the session variable for login status to true
            $_SESSION['logged_in'] = true;
            $_SESSION['name'] = $username;
            echo "successfull ";
            redirect('home.php');
        }
        else { 
                echo "didnt return row<hr>";
                 redirect back to login page.
                redirect('loginPage.php');
            }
    }
?>

そして、これが私のホームページの上部にあるコードです..

<?php
// Start session
session_start();
// Include required functions file
require_once('functions.php');
// Check login status... if not logged in redirect to login screen
    if (check_login_status() == false) {
        redirect('loginPage.php');
    }
$username = $_SESSION['name'];

?>

私が何を意味するのかをもう少し明確にしたい場合は、gateKeeperにサインアップして、私が話していることを確認してください。

また、これは私の最初の質問なので、どのように質問したかについてのコメントをいただければ幸いです。

ありがとう!

4

2 に答える 2

0

置き換えてデバッグしてみてください

 if (check_login_status() == false) {
        redirect('loginPage.php');
    }

 if (!isset($_SESSION['name'])) { #could be any session variables that you like..
    redirect('loginPage.php');
}

またはprint_r($_SESSION)ホームページの上で行います。

于 2013-03-07T01:43:59.763 に答える
0

最初のページは loginPage.php (または loginPage.php 自体) からのフォームを処理するスクリプトであり、2 番目のページは認証後にアクセスするページであると想定しています。

私が間違っていなければ、問題は時々あなたが正しく識別されず、それがあなたをあなたのログインに再びリダイレクトしていることにあるようです. check_login_status() 関数のコードを教えていただけますか?

于 2013-03-07T01:31:04.870 に答える