8

私の PHP Web サイトでは、ユーザーはログインして、「Remember me」をチェックして Cookie を設定することができます。

SESSION変数として何を保存する必要がありますか? ユーザー名、ハッシュ化されたパスワード、user IDおよびuser ID? のみを保存するuser IDと、誰かが を編集しSESSIONて ID を変更することはできませんか?

はどうCOOKIEですか?のみを保存する必要がありuser IDますか?私の知る限り、エンドユーザーは Cookie を変更できます...

4

4 に答える 4

26

セッションと Cookie について明確なビジョンを持っていないようです。

あなたのコードを除いて、誰もセッションの内容を変更することはできません(攻撃以外)。そのため、頻繁にアクセスする必要があるものuser idや、適切なものすべてを保存できます。usernameCookie には、後でユーザーがページにアクセスしようとしたときに認識できる難読化された情報を保存する必要があります。そのため、Cookie の内容に基づいて、ユーザー セッションを再生成できます (つまり、ユーザーを自動的に再ログインします)。ユーザーは Cookie の内容を変更できるuser idため、セキュリティ上の理由から、単純なものであってはなりません。

簡単な例を挙げただけです。完璧にはほど遠いですが、それほど悪くはありません! シナリオに合わせて調整する必要がある場合があります。

ここで、次のような Cookie コンテンツを作成できます。

$salt = substr (md5($password), 0, 2);
$cookie = base64_encode ("$username:" . md5 ($password, $salt));
setcookie ('my-secret-cookie', $cookie);

後でユーザーを再ログインするには、次のようにします。

$cookie = $_COOKIE['my-secret-cookie'];
$content = base64_decode ($cookie);
list($username, $hashed_password) = explode (':', $hash);

// here you need to fetch real password from database based on username. ($password)
if (md5($password, substr(md5($password), 0, 2)) == $hashed_password) {
    // you can consider use as logged in
    // do whatever you want :)
}

アップデート:

この概念をカバーするこの記事を書きました。それが役に立てば幸い。

于 2013-07-05T17:04:25.083 に答える
5

ランダムなセッション値を Cookie に保存する必要があります。ユーザーに関する情報を Cookie 自体に保存するべきではありません。次に、各ページの読み込み時に Cookie のセッション ID をチェックして、(a) ユーザーがそのコンテンツにアクセスできる必要があること、および (b) セッション ID が有効であることを確認できます。

PHP では、 と を使用session_set_cookie_paramssession_nameて Cookie のパラメーターを設定できます。

于 2013-07-05T17:01:18.240 に答える
0

ユーザーはセッション変数を編集できません。これらはサーバーで管理されます。

セッション変数の利点
1.) 安全
2.) 堅牢

セッションの短所 1.) セッションが存在するまでの寿命が短い、


ユーザーがブラウザサーバーを閉じるとセッションが
破棄される session_destroy() を使用してセッションが破棄されました。

したがって、セッションはより安全です

一方、Cookie を使用すると、ユーザーの好みを記憶できます

両方を組み合わせて使用​​すると、コードに利点があります

You can store userid and username in cookie, then verify user identity using its combination.

終了しない場合は、ユーザーをログインしてセッションに情報を保持し、Cookie を更新できます。

于 2013-07-05T17:05:29.097 に答える