【PHP】「セッション情報を削除」ってどういう意味? session_regenerate_id 編
公式ガイドにはこんな記載が。
bool session_regenerate_id ([ bool $delete_old_session = false ] )
session_regenerate_id() は現在のセッションIDを 新しいものと置き換えます。
その際、現在のセッション情報は維持されます。パラメーター:delete_old_session
http://www.php.net/manual/ja/function.session-regenerate-id.php
関連付けられた古いセッションを削除するかどうか。
「古いセッションの情報」とは何?
下記テストコードでも明らかなように、
session_regenerate_idを実行しても、スーパーグローバル$_SESSION の情報は変化がありません。
■テストコード
<?php session_start(); // 現在のセッションIDを表示 echo session_id()."<br/>"; //セッションに情報を格納 $_SESSION['color'] = 'green'; //セッションIDを再作成 session_regenerate_id(true); //異なるセッションIDとなる echo session_id()."<br/>"; //セッション情報は元のまま print_r($_SESSION);
■結果
evqeikga6u9to83c8u8aqblds5 iuik79khoaogc58imt442okcn0 Array ( [color] => green )
Cookieを指しているでもない模様
セッション名は一意(=PHPSESSID)のため、
session_regenerate_idを行うと引数の状態(=「古い情報を残すか」)にかかわらず
常にこの値をキーにしたセッション値が更新されます。
(例)
■解決
「古い情報」とはサーバーのキャッシュのこと
色々調べた結果、「古いセッション」とはサーバーのキャッシュ情報のことだと分かりました。
■テストコード ※session_regenerate_id(true)の場合
<?php session_start(); // 現在のセッションIDを表示 echo session_id()."<br/>"; //セッションIDを再作成 session_regenerate_id(true); // 新しいセッションIDを表示 echo session_id()."<br/>";
■結果
C:\xampp\tmpフォルダ には新しいセッションIDのファイルしか存在しない
■テストコード ※session_regenerate_id(false)の場合
<?php session_start(); // 現在のセッションIDを表示 echo session_id()."<br/>"; //セッションIDを再作成 session_regenerate_id(false); // 新しいセッションIDを表示 echo session_id()."<br/>";
■結果
C:\xampp\tmpフォルダ には古いセッションIDのファイルも存在する
うぬー。分かれば簡単なんだけど。。嵌った。