0
<?php
session_name('MYSESSION');
session_set_cookie_params(0, '/~cgreenheld/');
session_start();
?>              

<?php
    if($_SESSION['authorisation'] == 'knownuser') {
       echo '<ul class="log">';
       echo '<li><h4>You are logged in "'.$_SESSION['user'].'"</h4></li>';
       echo '<li><a href="logout.php">Logout</a></li>';
       echo "</ul>";
     } else {
        echo "<h4>You are not logged in</h4>";
     }

     if($_SESSION['authorisation'] == 'knownuser') {
        echo "<ul>";
        echo "<li><h4>You are logged in and already have an account</h4></li>";
        echo '<li><a href="index.php">Return Home</a></li>';
        echo "</ul>";
       } else {

        echo "<form method='post' action='".$_SERVER['PHP_SELF']."'>";
        echo '<fieldset class="login">';
        echo "<h2>Login</h2>";
        echo "<ul>";
        echo '<li><label for="Username"> Username: </label> <input type="text" name="Username" id="Username"></li>';
        echo '<li><label for="Password"> Password: </label> <input type="password" name="Password" id="Password"></li>';
        echo '<li><input type="submit" value="Login"><li>';
        echo "</ul>";
        echo "</fieldset>";
        echo "</form>";
       }
       if ((isset($_POST['Password'])) && $_POST['Password'] != "") {                   
         $conn= new mysqli("localhost", "my_user", "my_password", "world"); //changed for the sake of this question

         $match_Username = '%';
         $match_Password ='';

         if(isset($_POST['Password'])) {
            $clean_Password = mysqli_real_escape_string($conn, $_POST['Password']);
            $match_Password =  sha1($clean_Password);
         }

        if (isset($_POST['Username'])) {
            $clean_Username = mysqli_real_escape_string($conn, $_POST['Username']);
            $match_Username = $clean_Username;
        }

        echo $query = "select * from User WHERE Username = '$match_Username' and Password = '$match_Password';";
        $result = $conn->query($query);

        if ($result->num_rows==1) {
            $_SESSION['authorisation'] = 'knownuser';
            $_SESSION['user'] = $_POST['Username'];
            header("Location: index.php");
            exit;
        } else {
            $_SESSION['authorisation'] = 'unknownuser';
            header("Location: error.php");
            exit;
            }               
        }

このバージョンでは、2 つの php タブが異なるファイルからのものであることを示します。私はユーザーをログインさせました。ユーザーがログインしたときに、フロントページにリダイレクトしたいのですが、「あなたはログインしていますここにユーザー名を挿入しています.ATMは空の文字列しか取得しません.理由がわかりません.誰か助けてください?私は自分の入力をsantiziedしていないことも知っています.また、認証セッション変数についてこのエラーが発生し続けます[22-Aug-2012 11:32:02] PHP通知:未定義のインデックス: 23 行目の /devel/cgreenheld/projects/Asgn1/login.php の承認 [2012 年 8 月 22 日 11:32:02] PHP 通知: 未定義のインデックス: /devel/cgreenheld/projects/Asgn1/login の承認.php on line 46 これが何についてなのかよくわかりませんが、もし誰かが私のためにそれを明確にしてくれたら、それは素晴らしいことです.

23 と 46 で間違っている行は次のとおりです。

if($_SESSION['authorisation'] == 'knownuser') {

このコードはこちら

4

4 に答える 4

1

さて、私は質問する問題を見つけました。セッションユーザーのissetがなかったので、チェックしていませんでした。確認を開始すると、ユーザー名が表示されていました。皆さんの助けと、私が抱えていた認証エラーの助けに感謝します。

于 2012-08-22T00:26:02.930 に答える
0

セッションの開始に問題があるようです。session_set_cookie_params(0, '/~cgreenheld/'); 2番目のパラメータに何か問題があると思います。ページには、www.example.com /〜cgreenheld/のようなURLとあなたのような設定が必要です。または、セッション開始が配置されているindex.phpを含めない可能性があります。

于 2012-08-22T00:10:38.027 に答える
0

エラーは、$ _ SESSION ['authorization']が設定されていないため、存在しないという事実に起因しています。それは存在せず、23行目と46行目で呼び出しているため、これらのエラーが発生します。注意として、これらの変数を呼び出す前に、これらの変数が設定されているかどうかをテストすることをお勧めします。そうすれば、それらが空であるか設定されていない場合でも、これらのエラーは発生しません。

if(!empty($_SESSION['authorisation']))

したがって、問題は、セッション変数がlogin.phpに設定されていないことです。問題の一部は、SQLクエリ後の条件文のheader()呼び出しに起因している可能性があると思います。HTMLを書き込む前にヘッダーを送信する必要があるため、フォームを上に書き込んでからヘッダーを送信すると、ヘッダーは機能しません。フォームのアクションを別のページ(「authenticate.php」など)に変更して、SQLクエリとセッション設定をそこに移動してみてください。上部のsession_start()を忘れずに、header()の前にhtmlがないことを確認してください。

于 2012-08-22T00:17:09.773 に答える
0

musaさんが指摘したように、あなたはミッションsession_start()機能です。authorisationあなたの通知は、キーが に存在しないことを示唆しており$_SESSION、これも初期化されていないセッションを示しています。

于 2012-08-22T00:03:17.463 に答える