PHP session メモ

セッションはクッキーと違いサーバーで値を管理し、識別用のPHPSESSIDのみクライアントに渡す。

***

・データがある場所

(1)ファイル(/var/lib/php/session)

session.gc_maxlifetimeを過ぎたあと、PHPにリクエストがあった場合、
(session.gc_probability / session.gc_divisor)の確率でGCが削除。

共有しているため違うアプリでGCが動くこともある。
必要なら、session.save_pathから個別に設定する。

(2)グローバル変数($_SESSION)

スクリプト終了時、ファイルに保存される。

(3)ブラウザクッキー(PHPSESSID)

ブラウザ閉じるまで保存される。

・session_start()

session_start()すると、
(3)がなければ割り当てる。既に存在する場合は再開する。
(1)のデータを(2)に格納。

スクリプトが終了すると、
(2)のデータを(1)に格納

(1)はスクリプトが終了されるまでロックされる。
必要なら、session_write_close()

・グローバル変数

session_start()しなくても(2)を変数としては使えるが、(1)には保存されない。

test1php

test2.php

エラーにはならない。この場合session_start()
しても結果は同じなので分かりづらい。

test2.php

この場合Noticeがでる。

・データ破棄

$_SESSION = array();
(2)を削除

session_destroy()にて
(1)を削除。(session_start()していないと削除できない)

・session_regenerate_id()

(1)の古いファイルは残したまま、新しいファイルが作成される。
(2)そのまま使える。
(3)は新しくなる。