2

私は PHP にはかなり慣れていませんが、テスト Web サイトで簡単なログイン ページを作成して、動作を確認することにしました。あまり安全ではないことはわかっていますが、まだあまり心配していません。私が抱えている問題は、ログインしようとすると、ユーザー名が正しいかどうかに関係なく、すぐにログインページにリダイレクトされることです。間違ったユーザー名またはパスワードを使用しても同じ結果が得られるため、ユーザー名とパスワードなどをチェックする PHP スクリプトに行くことさえないと思います。フォームが HTML であるため、これが PHP の問題かどうかは完全にはわかりません。そうでない場合は申し訳ありません。

ログインページ:

<?
include"includes/head.inc";
?>

    <div class="login" align="center";>

    <h1>Log In</h1>

    <form action="/cp/login.php" method="post">

        <table border="0" cellspacing="2" cellpadding="2">
            <tr>
                <td>
                    Email
                </td>
                <td>
                    <input type="text" name="username">
                </td>
            </tr>
            <tr>
                <td>
                    Password
                </td>
                <td>
                    <input type="password" name="password">
                </td>
            </tr>
        </table>

        <input type="submit">

    </form>

    </div>

    <?
    include"includes/footer.inc";
    ?>

ログイン.php:

<?
$username = $_POST['username'];
$password = $_POST['password'];

session_start();
include"../includes/connect.inc";

$q = "SELECT * from users where email='$username' and password='MD5($password)'";
$result = mysql_query($q, $connection) or die
("Could not execute query : $q." . mysql_error());

if (!$result) {

    echo "<h1>Incorrect username or password.</h1>";

}
else {
    $r              = mysql_fetch_array($result);
    $login_username = $r["email"];
    session_register("login_username");
    Header("Location: protected.php");
}

?>

Protected.php:

<?
session_start();
if ($login_username == "") {
    Header("Location: ../login.php");
}
else {
    include"../includes/head.inc";
    include"../cp.inc";
    include"../includes/footer.inc";
}
?>

必要な場合に備えてすべてのファイルを含めましたが、ログインページをループしているだけで、他のページを循環していないようです。入力しているユーザー名とパスワードは正しく、以前のログイン システムで機能していたので、書き直して機能を改善しました。ばかげたことや明白なことを見逃していないことを願っています。読んでくれてありがとう。

4

1 に答える 1

1

これを引き起こす可能性のあるもの:

session_start();
if($login_username=="") {

あなたはセッション内の何かを参照しています。これはあなたがそれをする方法です:

session_start();
if (!isset($_SESSION['login_username']) || $_SESSION['login_username']=="") {

もう1つの小さな問題:

<?
$username=$_POST['username'];
$password=$_POST['password'];

session_start();

$_POSTキーにアクセスする前に、まずキーをテストする必要があります。

if (!isset($_POST['username'], $_POST['password'])) {
    die("Invalid page request");
}
session_start();
$username=$_POST['username'];
$password=$_POST['password'];

最後になりましたが、PDOを学びましょう。mysql_関数の継続的な使用について警告するページも参照してください:http: //uk.php.net/manual/en/function.mysql-connect.php

于 2012-06-14T13:43:53.367 に答える