php のセッションは、何もしないとき、ファイルに保存される。
session_decodeをつかえば、ファイルに保存されたsession データを取り出すことが出来る。
session 一覧を取り出す方法
session は session_save_path() で指定されたフォルダにあるので、そこから取り出すことが出来る
<?php $ret = glob(session_save_path()."/sess*"); $ret = array_filter($ret, function($e){ return ! in_array($e, ["..",".","thumbs.db",".DS_Store"]); } );
これで、現在有効に使われているセッション一覧を取り出すことが出来て
セッションの一覧を見る
セッションのファイルを開いて、session_decode をすれば中身を取り出すことが出来る
<?php $session_string = file_get_contents("path/to/session/sess_XXXXX"); $tmp = $_SESSION; $str = file_get_contents($e); session_decode($str); $obj = $_SESSION; $_SESSION = $tmp;
session_decode 関数は、$_SESSION変数にロードしてしまうので、現在のセッションを一旦退避した上で、変数に取り出すといい。
全セッションを取り出す
これらをまとめて、現在のセッションを表示するページを作ることができた。
<?php function list_up_sessions() { //session は sses* がPREFIX固定 $ret = glob(session_save_path()."/sess*"); $ret = array_filter($ret, function($e){ return ! in_array($e, ["..",".","dummy.txt",".DS_Store"]); } ); $values = array_map( function( $e){ $tmp = $_SESSION; $str = file_get_contents($e); session_decode($str); $obj = $_SESSION; $_SESSION = $tmp; return var_export($obj,true); }, $ret ); $keys = array_map(function($e){ $e = basename($e); $e = str_replace("sess_", "", $e); return $e; }, $ret); $session_list = array_combine($keys, $values); return $session_list ; }
ここから、セッションを管理したり、閲覧者の人数、強制ログアウトなどが可能になる。
セッション内容を見ることでエラーを調べたり出来るの便利になる。