2009-12-07 11 views
12

私のウェブサイトにログインシステムがあり、データベースに保存されているユーザの詳細はユーザID識別子)、メールアドレス(ユニーク)、表示名(一意ではない)、パスワードmembersince
クッキーには何を保存すればよいですか?私は有効期限のあるクッキーにユーザーIDだけを格納し、次にサインアップした後にユーザーがクッキーをチェックしてログインするように考えていました。彼がログアウトすることを決めたら。
*少しの説明も非常に役に立ちます。おかげユーザログイン中に「Remember me」を実装するためにクッキーに保存するもの

+0

は、すでに答えているように思えます自分自身の質問、ユーザーIDを保管してください。 – TechTravelThink

+1

これは安全ではありません - 下記の回答を参照してください。 – Jon

答えて

12

アプリケーションのみが知っている秘密鍵で署名した場合、cookieにuseridを格納することができます。それ以外の場合は、ユーザーがクッキーを何かに変更して、他のユーザーとしてログインすることも可能です。したがって、ユーザーIDを保存する場合は、秘密鍵(理想的にはHMACを使用)を使用してユーザーIDのハッシュを格納し、ログインするときは同じハッシュを計算し、それをクッキーのハッシュと比較します。別の解決策は、ランダムなトークンを生成し、それをデータベースに格納し、それをクッキー内で使用することである。それが長くてランダムであれば、誰かが別の人のトークンを推測する可能性はほとんどありません。

+0

ありがとうたくさんの男 – halocursed

+0

ありがとうございました!しかし、「秘密鍵を持つユーザーID」はどういう意味ですか?私が悪い人で、私はクッキー全体を固め、このハッシュ・ストリングを取得して私がログインしたユーザーであるとふりをして、サーバーが私が間違った人であることを知ることができますか? – Jaskey

+0

秘密鍵のポイントは、クッキーを設定するだけで、あなたが望むどんなユーザーでも "ログイン"できないことを確認することです。秘密鍵を知らなければ、あなたはクッキーを構築する方法がありません。既存のユーザーのCookie全体を作成する場合は、もちろんそのユーザーとしてログインすることができます。 1)ある時間後にクッキーを期限切れにする(クッキーにタイムスタンプをエンコードする)、2)特定のIPアドレスに固有のクッキーを作成する(再度、クッキー内のIPアドレスをエンコードする)、3)特定のユーザエージェント文字列に固有のものにします(これは簡単に偽造することができます) –

1

はPHPが組み込まれていあなたが探している正確に何をセッション管理:

http://us.php.net/manual/en/book.session.php

を私はクッキーにUSER_IDを保存することをお勧めしません。代わりに、独自のトークンを生成し、データベース内のユーザーとトークンを関連付けることができ、&が各要求でトークンを再生成することを確認できます。ここでもセッション管理はPHPに組み込まれているため、少し冗長です。

+0

あなたはそれについて少し説明できますか? – halocursed

-2

クッキーの有効期限を2日またはユーザーを覚えて保存したい日数に加えて保存します。

0

PHP '$ _SESSIONはこれを行います。フルコントロールが必要な場合は、独自のセッションクラスを作成することもできます。

小さなチュートリアルでは、ここに発見された:ここでhttp://www.tizag.com/phpT/phpsessions.php

ではなく、PHPのデフォルトのストアのセッションにMySQLを使用するための小さな一例です(/ tmp内のファイル): http://www.hawkee.com/snippet/2018/

関連する問題