session_start()
必要以上の呼び出しを避けながら、PHP カスタム セッション ID を実装したいと考えています。
基本的に、1 つの単純なアルゴリズムは
session_start();
if ( ! isset( $_SESSION['MyStuff'] )) {
session_write_close();
session_id( generate_my_id() );
session_start();
}
$_SESSION['MyStuff'] = some stuff...;
セッションが期限切れになった場合、または最初に存在しなかった場合、最初のセッションはsession_start()
独自の ID を作成し、Cookie をブラウザーに送信します。その後、セッションが終了し、別の Cookie が送信されて別のセッションが作成されます (さらに、セッション ファイルの作成とクローズのオーバーヘッドが発生します)。
別の解決策は、PHPSESSID Cookie が存在するかどうか、およびその値が - 家庭で調理された - generate_my_id() 関数に従ってフォーマットされているかどうかをテストしてから、$_SESSION 値かどうかを再度テストすることです。しかし、セッションの有効期限が切れた場合 ($_SESSION['MyStuff'] がない場合)、不要なsession_start()
ものが呼び出されます。
質問は、私の観察に基づいて、実際には2つの質問です
を呼び出す前に、PHP がセッション ID を作成する方法を指定する方法はありますか (可能ではないようです)
session_start()
。新しいセッションを作成する必要があるかどうかを確認する方法はあり
session_start()
ますか、それとも利用可能なサーバー側を使用するだけですか? (それは最初の呼び出しを排除します)
どんな良い代替案でも大歓迎です。
編集
カスタム ID とは何かについての明確化。
セッション ID は、PHP がサーバー上のセッションを取得するために使用する文字列キーであり、各ユーザーは異なるキーを持っています。通常、そのキーは Cookie に保存され、ブラウザはその Cookie をリクエストとともにサーバー / PHP に送信して、セッションに「接続」します。PHP は、設定に基づいて、MD5 (ユーザーおよび時間関連データ) または SHA1 (同じ関連データ) に基づいて、セッション ID キーを自動的に設定します。したがって、セッション ID は MD5 または SHA1 キーのいずれかであり、できれば一意です。
カスタム ID は、md5/sha1 の作成をバイパスして、プログラマ (私) が手動で作成したキーです。