セッションIDの再生成

PHP 5.1以降なら、単純に

session_regenerate_id(true);

でいいのだけれど、それ以前の環境だと引数が取れないので使えない。しかも、ただ単に

session_regenerate_id();

とやると、セッションをファイルベースで管理している場合はそのファイルが残ってしまう。それではセキュリティ的にも運用としてもダメダメなので、自分で実装することに。とは言え、PHPなので難しいことはしない。

session_start();                         // セッション開始
$stored = serialize($_SESSION);          // セッション格納値を保存
session_destroy();                       // セッションファイル破棄
session_id(md5(uniqid(rand(), true)));   // セッションID再生成
session_start();                         // セッション再開始
$_SESSION = unserialize($stored);        // 保存していた格納値を戻す