以前は、データベースに保存され、ユーザーIDにマップされた一意のハッシュを持つ追加のCookie「rememberme」を作成していました。
ユーザーがそのような Cookie を持っていた場合、ウェブサイトはデータベースでその値を見つけようとしました。見つかった場合は、セッションがセットアップされていました。
その後、新しいプロジェクトを開発して、この一意のハッシュを自分で生成するのはあまり安全ではないのではないかと考えました。1 つの操作 (ユーザー識別) に対して 2 つの Cookie (ネイティブ "PHPSESSID" + my "rememberme") を保持するのはやり過ぎです。
おそらく、グローバルセッションの有効期間ではなく、異なるユーザーセッションに対して個別にセットアップする方法があります...または、ユーザーIDにマップされたデータベースにユーザーセッションを保持する方がよいでしょうか?
更新 1 「私を記憶する」ボタンを作成するのが非常に難しい場合は、別の方法で「コンピューター以外のボタン」を作成できると思いました。アイデアは、php.ini でデフォルトの cookie_lifetime を 1 週間設定することです (たとえば)。ユーザーがこのチェックボックスをオンにすると、session_set_cookie_params 関数を使用して cookie_lifetime をゼロに設定します。
したがって、最初の質問は、session_set_cookie_params が他のユーザーの Cookie に影響を与えるかどうかです (ドキュメントでは、session_set_cookie_params オプションは、php プロセスが実行されるまで有効であると記載されています)。
2 番目の質問は、session_set_cookie_params がグローバル設定に影響を与えていない場合、セッションの再生成は、長寿命の Cookie を保持したくないユーザーに影響しますか?
更新 2: [質問 1 の回答]
session_set_cookie_params 関数をテストしました。session_set_cookie_params を使用してセッション Cookie の有効期間をゼロに設定し、30 秒間実行するスクリプトを作成しました。
if ($_GET['test']) {
session_set_cookie_params (0);
while (true) {
sleep(1);
}
}
session_start();
そのため、最初のブラウザーで ?test=1 パラメーターを指定してこのスクリプトを開始し、その直後 (このスクリプトの実行中に) 2 番目のブラウザーでパラメーターを指定せずにこのスクリプトを開始しました。答えはノーです。2 番目のブラウザの Cookie は影響を受けませんでした。php.iniで指定された寿命がありました
更新 3: [質問 2 の回答] 次に、再生成が session_set_cookie_params によって設定されたセッション cookie の有効期間に影響するかどうかを確認しようとしました。
はい、影響します。session_set_cookie_params によって設定されたカスタマイズされた有効期間でセッション cookie を設定し、session_regenerate_id() を呼び出すと、cookie には php.ini で設定された有効期間があります。
しかし、session_regenerate_id() を呼び出す前に session_set_cookie_params (0) を設定すると、Cookie の有効期間が正しくなります。
それで、それだけです!それは簡単でした!8)
紳士淑女の皆様、ありがとうございました!