ブラウザを閉じて再度開くと、PHPは新しいセッションを開始します。
古いセッションファイルは引き続きセッション保存ディレクトリに保持されますが、新しいセッションが開始されます。
新しいセッションを開始する必要があることを知るために、phpはブラウザで何を探しますか?
私が本当に求めているのは、session_start()が内部で正確に何をするのかということだと思います
セッションIDを含むCookieは、デフォルトで有効期限なしで設定されます。これは、ブラウザを閉じると期限切れになることを意味します。したがって、クライアントは古いセッションIDを持たなくなるため、その時点でセッションは失われます。
質問に簡単に答えるために、PHPSESSIDというCookieを探します。リクエストでCookieが提供されていない場合は、 session_regenerate_idを呼び出してCookieの値を初期化します。
その後、Cookieはブラウザの存続期間を通じて永続的に使用されます。
他の設定が適用されない限り、これはデフォルトの動作の簡略版です。
あなたが知りたいことはすでにここに書かれています:http ://www.php.net/manual/en/function.session-start.php
session_start()は、GETまたはPOSTリクエストを介して渡された、またはCookieを介して渡されたセッション識別子に基づいて、セッションを作成するか、現在のセッションを再開します。
session_start()が呼び出されたとき、またはセッションが自動開始されたとき、PHPはopenおよびreadセッション保存ハンドラーを呼び出します。これらは、デフォルトで提供される組み込みの保存ハンドラーか、PHP拡張機能(SQLiteやMemcachedなど)のいずれかです。または、session_set_save_handler()で定義されているカスタムハンドラーにすることもできます。読み取りコールバックは、既存のセッションデータ(特別なシリアル化された形式で保存されている)を取得し、シリアル化されていない状態で、保存されたセッションデータをPHPセッション処理に戻すときに$_SESSIONスーパーグローバルに自動的に入力するために使用されます。
基本的に、PHPはファイルシステム(通常は/ tmpディレクトリ)に特別なファイルを書き込み、そこからデータを取得します。
セッションID(PHPSESSID)は、ユーザーのブラウザのCookieに保存されます。何も見つからない場合、または1つが無効な場合は、1つ作成します。下の画像は、知りたいことを理解するのに役立つ場合があります(Chromeからのものです)。
PHPはこのセッションIDを取得すると、セッションsave_path(通常/tmp
はUNIXマシン上)に格納されている対応するセッションを探します。次に、 $_SESSIONスーパーグローバルを使用してそのセッションファイルに保存されている情報にアクセスする機能を提供します。
Cookieは、呼び出し前にPHPページに何も出力されていない場合にのみ保存されsession_start()
ます。何かが出力されている場合、Cookieは保存されないため、それらの値を保存し、各ユーザーを認識して分離するには、別の方法(SQLite
または)が必要です。MySQL
UNIQUE