0

私は最初の一歩を踏み出しましたphpが、この解決できない問題に遭遇しました。MySQL単純なデータベースを使用して、訪問者から提供された資格情報を識別する Web サイトを作成しようとしています。この時点では、ウェブサイトの全体的なセキュリティにはあまり関心がないことに注意してください。今問題に:

3つのファイルがあるとします。ファイルmain_login.phpには、ユーザーが Web サイトに入るために使用する必要があるフォームが保存されており、次のように呼び出していchecklogin.phpます。

<form name="form1" method="post" action="checklogin.php">

checklogin.phpユーザーからの入力 (名前とパスワード) がデータベースに含まれているかどうかを確認しています。それが正しい場合は、次の場所にリダイレクトしていますindex.php

// More unrelated php here....
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$password'";
$result=mysql_query($sql);

// Mysql_num_row is counting table row
$count=mysql_num_rows($result);
// If result matched $username and $password, table row must be 1 row
if($count==1)
{   
   // Register $username, $password and redirect to file "index.php"
   $_SESSION['username'] = $username;
   $_SESSION['password'] = $password;
   header("location:index.php");
}
else 
{
   echo "Wrong username or password";
}

最後にindex.php、「$_SESSION[username]」が定義されているかどうかを確認しています。定義されていない場合は、ユーザーを main_login.php にリダイレクトします。

<?php
    session_start();
    if (!isset($_SESSION['username']))
    {
        header("location: main_login.php");
    }
?>

// HTML code here...

今の問題: おそらく私はこれに多くの時間を費やしすぎて、明確に考えることができませんが、間違った資格情報を入力した場合とは異なり、正しいパスワードとユーザー名を入力するたびに、常に main_login.php にリダイレクトされます。これを解決する可能性が高い人はいますか?

4

3 に答える 3

1

チェックログイン ページでセッション変数を設定しているときに、セッションを開始していないようです。これは$_SESSION['username']、インデックス ページにリダイレクトされると設定されないことを意味します。

于 2013-02-07T00:35:29.287 に答える
0

session_start()出力の前にスクリプトの先頭に。

セッションは初期化されていないため、セッション変数を操作できません。

于 2013-02-07T02:11:06.383 に答える
0

session_start() は、GET または POST リクエストを介して渡された、または Cookie を介して渡されたセッション識別子に基づいて、セッションを作成するか、現在のセッションを再開します。

セッションCookieがなく、投稿がないかそこに到達したため、session_startがFRESHセッションを開始し、ユーザー名とパスワードをクリアして、安全のためにリダイレクトにSIDを追加するだけです。それ以外の場合は、インデックスにリダイレクトされ、直接再度ログインします。

header("location:index.php".SID); //should fix the missing sessioncookie
于 2013-02-07T00:43:20.850 に答える