それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

phpのセッション一覧からファイルから取り出す

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 ;
}

ここから、セッションを管理したり、閲覧者の人数、強制ログアウトなどが可能になる。

セッション内容を見ることでエラーを調べたり出来るの便利になる。

参考資料

http://www.php.net/manual/ja/function.session-decode.php

http://www.php.net/manual/ja/function.session-save-path.php