2

クライアントが「remember me」ボタンを使用するかどうかを決定できる、PHP を使用したログイン/ログアウト システムを作成しています。そして login.php ファイルで、次のように記憶する必要があるかどうかを確認します。

if(isset($_POST["remember_me"])){
    $_SESSION["remember_me"] = true;
}

したがって、gc_maxlifetime を設定する場合、クライアントを記憶する必要があるかどうかを知る必要があります。しかし、私たちが知っているように、gc_maxlifetime は session_start() の前に設定する必要があり、アクセスできません

$_SESSION["remember_me"]

変数。私は何をすべきか?特定のセッションがいつガベージ コレクターの対象になるかをサーバーに伝える他の方法はありますか?

前もって感謝します。

4

1 に答える 1

1

セッションを永続的なログインに使用するのは良い考えだとは思いません。1つは、gc_maxlifetimeセッションごとに異なるものを使用しても機能しないためです。説明書にあるように

異なるスクリプトで session.gc_maxlifetime の値が異なるが、セッション データを保存する場所が同じである場合、最小値のスクリプトがデータを消去します。この場合、このディレクティブを session.save_path と共に使用します。

したがって、セッションの保存場所も変更したくない場合は、そこに移動しないでください。

この問題に加えて、サーバー上で彼のログイン情報だけでなく、彼のセッション全体を維持しています。アプリケーションがより多くのデータをセッションに保存し、それを適切にクリーンアップしない場合、サーバーは、二度​​と使用されない可能性のある大きな長時間のセッションになります。とにかく大量のデータをセッションに保存するのは間違っていますが、それは別の議論です。

リメンバーミー関数を作成するために、いくつかのポインターについて、stackexchange のhow-to-securely-implement-a-remember-me-featureを確認します。

于 2013-06-05T13:30:49.293 に答える