3

SQLを使用して簡単なログインシステムを作成しました

4つの主要なコンポーネントインデックスがあります-ユーザー名を要求し、checkloginに合格します-資格情報をチェックしますlogsuccessホームページ-ログインに成功した後のランディングページ

エラーの生成は、投稿の最後に表示されます

Index.php asks for username and pass

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <HTML>
     <HEAD>
      <TITLE>Nottingham Uni</TITLE>

      <script type="text/javascript" src="js/mootools-1.2.1-core-yc.js"></script>
      <script type="text/javascript" src="js/process.js"></script>

      <link rel="stylesheet" type="text/css" href="style.css" />
    </HEAD>

     <BODY>

    <center>
    <div id="intro">
      <p>&nbsp;</p>
      <p><img align="absmiddle" src="images/nott-uni-logo.jpg"></p>
    </div>

    <div id="status">

    <fieldset><legend align="center">Authentication</legend>

    <div id="login_response"><!-- spanner --></div>

    <form id="login" name="login" method="post" action="checklogin.php">
    <table align="center" width="300" border="0">
    <tr>
    <td width="80">Username</td><td><input id="name" type="text" name="myusername"></td>
    </tr>
    <tr>
    <td>Password</td>
    <td><input type="password" name="mypassword"></td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    <td>&nbsp;</td>
    </tr>
    <tr>
    <td>&nbsp;</td>
    <td><input id="submit" type="submit" name="submit" value="Login">
    </tr>
    </table>
    </form>
    </fieldset>

    </div>
    </center>
     </BODY>
    </HTML>


checklogin.php checks for the credentials

    <?php

    $link = mysql_connect('www.xxxxx.com', 'xxxxxx', 'xxxxxx');
    if (!$link) {
        die('Could not connect: ' . mysql_error());
    }

    mysql_select_db("brainoidultrafb", $link);

    // username and password sent from form 
    $myusername=$_POST['myusername']; 
    $mypassword=$_POST['mypassword']; 

    // To protect MySQL injection (more detail about MySQL injection)
    $myusername = stripslashes($myusername);
    $mypassword = stripslashes($mypassword);
    $myusername = mysql_real_escape_string($myusername);
    $mypassword = mysql_real_escape_string($mypassword);
    $sql="SELECT * FROM logintbl WHERE stu_email='$myusername' and password='$mypassword'";
    $result=mysql_query($sql);

    // Mysql_num_row is counting table row
    $count=mysql_num_rows($result);

    // If result matched $myusername and $mypassword, table row must be 1 row
    if($count==1){

    // Register $myusername, $mypassword and redirect to file "login_success.php"
    session_register("myusername");
    session_register("mypassword"); 
    header("location:login_success.php");
    }
    else {
    echo "Wrong Username or Password";
    }
    ?>


If its success it goes to homepage.php

logsuccess.php is below

    <?php
    session_start();
    if(!session_is_registered(myusername)){
    header("location:homepage.php");
    }
    ?>
    <html>
    <body>
    Login Successful
    </body>
    </html>


these codes are give in the following errors

    Deprecated: Function session_register() is deprecated in /home/content/58/9508458/html/pabrowser/checklogin.php on line 29

    Warning: session_register() [function.session-register]: Cannot send session cache limiter - headers already sent (output started at /home/content/58/9508458/html/pabrowser/checklogin.php:29) in /home/content/58/9508458/html/pabrowser/checklogin.php on line 29

    Deprecated: Function session_register() is deprecated in /home/content/58/9508458/html/pabrowser/checklogin.php on line 30

    Warning: Cannot modify header information - headers already sent by (output started at /home/content/58/9508458/html/pabrowser/checklogin.php:29) in /home/content/58/9508458/html/pabrowser/checklogin.php on line 31
4

2 に答える 2

11

行う代わりに:

session_register("myusername");
session_register("mypassword"); 

あなたは簡単に行うことができます:

session_start();
$_SESSION['username'] = 'something';
$_SESSION['password'] = 'something';

また、ユーザー名が設定されているかどうかを確認するには、次の操作を実行できます。

session_start();
if(!isset($_SESSION['username'])){
    // not logged in
}

session_start()チェック/初期化のすぐ上に関数があることに注意してください。コードでは、 「ヘッダーはすでにPHPによって送信されています」というメッセージを防ぐために、スクリプトの先頭に追加することをお勧めします。

mysql_*また、新しいコードには関数を使用しないでください。それらはもはや維持されておらず、コミュニティは非推奨プロセスを開始しています。赤いボックスが表示されますか?代わりに、プリペアドステートメントについて学び、 PDOまたはMySQLiのいずれかを使用する必要があります。決定できない場合は、この記事を選択するのに役立ちます。あなたが学びたいのであれば、ここに良いPDOチュートリアルがあります。

コードに関する最後の1つ。パスワードを適切にハッシュしていないようです。これは悪い習慣と考えられています。攻撃者がデータベースを入手した場合、データベース内のユーザーに説明する必要があります(たとえば、攻撃者がすべてのパスワードを取得したことを伝える必要があります)。

于 2012-06-24T12:05:40.527 に答える
0

@非推奨の関数の前に使用することで、この問題を回避できます。お気に入り@session_register()

于 2013-04-05T06:21:50.683 に答える