0

私のホームページには、ユーザー名用とパスワード用の 2 つの入力ボックスがあります。データベースをチェックしてこれらの資格情報をチェックし、アクセスを許可または拒否するphpファイルがあります。ユーザーがアクセス権を取得したら、自分の画面に表示したい、次のようにログインしました:....「ログインするためにホームページに入力されたユーザー名」....

データベースをチェックしてアクセスを許可または拒否するコードを次に示します。

<?php

$host="localhost"; // Host name 
$username="********"; // Mysql username 
$password="********"; // Mysql password 
$db_name="db?K1012904"; // Database name 
$tbl_name="AdminUser"; // Table name 

// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB");

// 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 $tbl_name WHERE username='$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:loginsuccess.php");
}
else {
echo "Wrong Username or Password"; 
}
?>

ここにユーザーが資格情報を入力します

 <form name="form1" class="navbar-form pull-right" method="post" action="checklogin.php">
          <input name="myusername"  type="text"  id="myusername" placeholder="Email">
          <input name="mypassword" id="mypassword" class="span2" type="text" placeholder="Password">
          <button type="submit" name="submit"class="btn">Sign in</button>
        </form>

ここにユーザー名を表示しようとしている場所があります

        <p class="navbar-text pull-right">
    Logged in as: <?php echo $myusername ?> </p>

私の問題は、ユーザーが入力したユーザー名を表示できないように見えることです。これを機能させる方法についてのアイデアはありますか?

4

5 に答える 5

1

ユーザー名がデータベースに保存されています。セッションに user_id を保存するだけです。

$_SESSION['user_id'] = // whatever the logged in user's id ends up being.

次に、後続のページで、その user_id をプルし、データベースで選択を実行して、他のクライアント情報を見つけます。データベースは、「ログインしている」データベース ID 識別子を除いて、$_SESSION ではなく、ユーザー データの正規のソースである必要があります。そうしないと、後で問題が発生します。

余談ですが、mysql_query は旧式で非推奨であるため、ストアド プロシージャとPDO バインド クエリを調べて自分の生活を保護したいと考えています。同様に、stripslashes() は悪い兆候です。ああ、プレーンテキストのパスワードを使用しています。

全体として、独自のログイン セキュリティ システムを作成する必要があるかどうかを自問し、その際にセキュリティに関して誰もが抱える標準的な問題をすべて再検討してください。代わりに、この繰り返し解決された問題に対するオープン ソース認証プロジェクトの解決策を調べてください。セキュリティに不慣れ人にはお勧めできません。

以下も参照してください: http://pear.php.net/packages.php?catpid=1 Pear Auth クラスhttps://github.com/Kausheel/Authentication

于 2013-03-21T16:33:25.457 に答える
1

session_registerphp 5.3 で廃止され、php 5.4 から削除されたため、セッション コードがまったく機能しない可能性があります。

セッションを使用するすべてのページの上部に配置session_start();し、次のような変数を割り当てる必要があります。

$_SESSION['myusername'] = $myusername;

その後、次のようにアクセスできます。

echo $_SESSION['myusername'];

セッションが開始されたページ。

于 2013-03-21T16:35:54.760 に答える
0

あなたは置くべきです

session_start();

session_register();
于 2013-03-21T16:36:00.490 に答える
0

使用しているメソッドのいくつかは非推奨ですが、引き続き機能するはずです。

ユーザーのユーザー名を格納する myusername というセッション変数を設定しています。そのため、現在のユーザー名をエコーするページに移動したら、変数 $_SESSION['myusername'] をエコーする必要があります。

例えば

<p class="navbar-text pull-right">
Logged in as: <?php echo $_SESSION['myusername']; ?> </p>

私は間違っているかもしれませんが、これで大丈夫だと確信しています。

于 2013-03-21T16:36:03.233 に答える
0

でログインしたときに、セッション変数にデータを保存できます

session_start();
...
$_SESSION['user_name'] = $user_name; $_SESSION['user_id'] = $user_id;

ただし、ログアウト時にsession_destroy()を使用してセッション変数を破棄することを忘れないでください

于 2013-03-21T16:37:22.037 に答える