0

私の問題の解決策はすでにあるかもしれませんが、私の問題の正確な名前はわかりません。そのため、今は検索できず、ここに問題を投稿する必要があります。

手動でログインすると (ユーザー名とパスワードを手で入力することを意味します)、プロファイル ページにデータベースのすべてのデータが正しく表示されます。下の写真を見てください.... 正しい画像

今度はログアウトして再度ログインします。今回は「Remember me box」にチェックを入れました。その後、ログアウトせずにブラウザを閉じました。ということで、次回はクッキーが効いてホームページに直接アクセスできました。今までみんな元気です。しかし、自分のプロフィール ページを確認したときに災害が発生しました。下の写真を見てください.... :( 間違った画像

「ユーザー名」列を使用して、データベースのテーブルの行を検出しました。私のコードでは、別のユーザーからの同じユーザー名を許可していないためです。プロフィールページのコードは次のとおりです。

session_start();
$name = $_SESSION['username'];
$result = mysql_query("SELECT * FROM store WHERE Username='$name'");
while ($row = mysql_fetch_array($result)) {
    $first = $row['Firstname'];
    $last = $row['Lastname'];
    $use = $row['Username'];
    $pas = $row['Password'];
}

次に、それら (4 つの変数 $first、$last、$use、および $pas) をプロファイル ページにエコーします。それで、私は今何をすべきですか?

4

2 に答える 2

1

まず、セッションが設定されており、空ではないことを確認してください。これによりempty()、明示的にチェックされます。isset()

session_start();
if (!empty($_SESSION['username'])) {
    $name = $_SESSION['username'];
    $result = mysql_query("SELECT * FROM store WHERE Username='$name'");
    while ($row = mysql_fetch_array($result)) {
        $first = $row['Firstname'];
        $last = $row['Lastname'];
        $use = $row['Username'];
        $pas = $row['Password'];
    }
}

注1:セッションは安全ではありません。セッションを保護する必要があります。

  1. PHPセキュリティガイド:セッション
  2. セッションとセキュリティ
  3. PHPセッションセキュリティ
  4. PHPセッション変数はどれくらい安全ですか?

注2php5.5で警告が生成される場合でも、mysql_*関数の使用は非推奨になるため、または代わりに使用してくださいE_DEPRECATEDPDOMySQLi

于 2012-12-15T13:52:02.780 に答える
-2
session_start();
$name = $_SESSION['username']; // here is the problem
$result = mysql_query("SELECT * FROM store WHERE Username='$name'");
while ($row = mysql_fetch_array($result)) {
    $first = $row['Firstname'];
    $last = $row['Lastname'];
    $use = $row['Username'];
    $pas = $row['Password'];
}

このステートメントでセッションが設定されているかどうかを確認することで確認できます

if (isset($_SESSION['username'])) {
    echo "Session is Set";
} else {
    echo "Session is not Set";
}

設定されないのでセッションによるエラーだと思います!

于 2012-12-15T13:42:10.423 に答える