セッションはクッキーと違いサーバーで値を管理し、識別用の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
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php //session_start(); ini_set("display_errors", "on"); ini_set("error_reporting", E_ALL); $_SESSION["test"] = "hello"; ?> <a href="test2.php">test2</a> |
test2.php
1 2 3 4 5 6 7 8 9 |
<?php //session_start(); ini_set("display_errors", "on"); ini_set("error_reporting", E_ALL); $_SESSION["test"] = "hello2"; echo $_SESSION["test"]; |
エラーにはならない。この場合session_start()
しても結果は同じなので分かりづらい。
test2.php
1 2 3 4 5 6 7 8 |
<?php //session_start(); ini_set("display_errors", "on"); ini_set("error_reporting", E_ALL); echo $_SESSION["test"]; |
この場合Noticeがでる。
・データ破棄
$_SESSION = array();
(2)を削除
session_destroy()にて
(1)を削除。(session_start()していないと削除できない)
・session_regenerate_id()
(1)の古いファイルは残したまま、新しいファイルが作成される。
(2)そのまま使える。
(3)は新しくなる。