ユーザー名をCookieの値に直接追加せずに、データベースに安全に保存するにはどうすればよいですか?
例: ログに記録されたユーザーのユーザー名を表示したい。彼が早期にブラウザを閉じた場合、これを行う唯一の方法は$ _COOKIE ['cookie name']であり、cookie値はデータベース内のusernameにリンクします。したがって、ユーザー名をハッシュする必要はありません。
正しいですか?そしてそれが正しければ、それは安全ですか?
安全です。パスワードをクライアント(ブラウザ)に保存しないでください。また、パスワードをブラウザに送信しないでください。
ユーザー名をCookieに保存できます。ここにパスワードを保存しない限り、これは安全です。
そこにユーザーIDを保存することもできます。そうすれば、正しいユーザーを見つけることができる間、認証の詳細は提供されません。
を使用しsessions
ます。に保存されたデータは、クライアントではなくサーバー$_SESSION
に保存されます。
以下は、Cookieを使用した永続的なログイン機能について話していることを前提としています。ただし、ユーザー名を覚えるだけの目的で(ただし、自動的にサインインするのではなく)、Cookieにユーザー名(オプションでエンコード)を含めることは問題ありません。とにかく、パスワードをCookieに含めることはできません。
Cookieは直接識別されるべきではありません。つまり、ユーザーID/名前はCookieに表示されるべきではありません。代わりに、テーブル内のユーザーにランダムデータを含む十分な長さの文字列を割り当て、それをCookie値に保存する必要があります。使用したら、文字列を更新して別のCookieを発行する必要があります。
例えば:
john | ewojroj1234ojqewor
jack | ljqwelkn1k31n23k33
2番目の列はCookieに配置されます。後で、ユーザーテーブルに対してその値をクエリします。
パスワードを変更してサインアウトすると、ユーザートークンの文字列も変更されます。
さらに読むために、BarryJaspanはこのアプローチに関する優れた記事を書きました。
これを行う最良の方法は、ユーザーテーブルのuser_id(一意に識別される主キー)のみを$_COOKIEまたは$_SESSION変数(おそらく$ _COOKIE ['user_id'])に格納することです。
次に、ページが読み込まれるたびに、そのIDを使用して、データベースから必要なユーザー情報を取得できます。たとえば(これは概念/疑似コードのみであることに注意してください。もちろん、最初に$_COOKIEまたは$_SESSIONデータパラメータをサニタイズ/クリーン/検証/バインドします):
SELECT * FROM user_table WHERE user_id = $_COOKIE['user_id']