現在作成中のこのウェブサイトを完成させようとしていますが、行き詰まっています。
DBに「orders」というテーブルを作成したい。このテーブルをusersテーブルに関連付けて、ユーザーが「orders.php」ページにアクセスしたときに(すでにログインすると)、現在および以前のすべての注文が表示されるようにします。
これらは私のテーブルフィールド/列になります:
idユーザー名注文番号説明数量合計
これが私のアプローチです:
新しい注文が作成されるたびに、ユーザーの選択(注文用に選択されたもの)に応じてすべてのテーブルフィールド/列を挿入しますが、ユーザー名は、ユーザー名を保持する$ _SESSIONまたは$ _COOKIE変数から収集される唯一の値になります。次に、ユーザーがorders.phpにアクセスしたら、クエリを実行して、そのユーザー名のみが注文したすべての注文を表示します。私はすべての入力/出力をサニタイズし、機密データをCookieに保存しないことに注意してください。私のシステムは、認証方法としてセッションのみを使用するように設計されているため、ブラウザを閉じるたびにログインする必要がありますが、それで問題ありません。
1)これは安全なアプローチですか?何か提案/コメントはありますか?
2)クエリの作成を手伝ってもらえますか?
私はリレーショナルデータベースを実際に使ったことがないので、ちょっと迷っています。username = "username from the session"であるテーブル "orders"からすべての注文を呼び出すにはどうすればよいですか?
これまでのところ私はこれを持っています:
"SELECT * FROM orders WHERE username = ? " //(Using PDO)
私はこれが機能することを知っていますが、私の懸念は、セッションがハイジャックされた場合など、ユーザーがユーザーの注文を取得できるかどうかです。
これをもう少し説明してくれてありがとう!
乾杯!
注意してください!人間が読めるユーザーID(user2345995
またはなどOllieJones
)を含むプレーンテキストのCookieを作成しないでください。悪者が推測するだけでそのようなCookieを偽造するのは非常に簡単であり、ユーザーの情報が漏洩します。
あなたはphpで働いています。したがって、phpのセッションメカニズムを使用して、ユーザーIDやその他の値を保存できます。phpは、推測が難しいセッションID(SID)を使用し、Cookieまたはsid=1234abcd9875
URLのパラメーターとして保存します。
システムの整合性のために、これを読んでください。これは実際にはかなりうまく設計された機能であり、15年ほどの間実際に使用されています。デバッグされています。
http://php.net/manual/en/session.idpassing.php
セッションシステムを使用している場合は、基本的に最初のページであるログインページでこれを行います。
session_start();
...
$_SESSION['username'] = $username; /* which you get by logging in */
...
注文検索ページで、ユーザー名を取得してクエリで使用するのと同様のことを行います。
session_start();
...
$orderstmt = $pdoconn->prepare("SELECT * FROM orders WHERE username = :username");
$orderstmt->execute( array(':username' => $_SESSION['username']) );
...
while ($row = $orderstmt->fetch()) {
/* use the row's data */
}
$orderstmt->closeCursor();
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加