PHPのセッションの管理方法に関する備忘録。
ブラウザのCookie内のセッションID(デフォルトはPHPSESSID)はサーバーサイドでもそのまま利用され、ハッシュ化等の加工はされません。
また、session.save_handlerが”files”の場合は、session.save_path以下にファイルが保存されます。セッションファイルからデコードする場合は以下のコードを実行すればOKです。
<?php
$file = '/var/lib/php/session/sess_{SESSION_ID}';
$contents = file_get_contents($file);
session_start();
session_decode($contents);
echo json_encode($_SESSION);
以下のコードでセッションデータを格納してセッションファイルの形式を見てみます。
<?php
session_start();
$_SESSION["hoge"] = "123";
$_SESSION["fuga"] = 5678;
$_SESSION["foo"] = true;
$_SESSION["bar"] = 123.456;
$_SESSION["null"] = NULL;
- session.serialize_handler = php
$ less /var/lib/php/session/sess_{SESSION_ID}
hoge|s:3:"123";fuga|i:5678;foo|b:1;bar|d:123.456;null|N;
文字列はs、数値はi、浮動小数点数はd、論理値はb、NULLはNとなっておりセミコロン区切りで定義されているのがわかります。デフォルトだとこの形式で処理されます。
- session.serialize_handler = php_binary
$ od -Ax -tx1z /var/lib/php5/sess_dg5e11g694m2qk73ilti5jokf1
000000 04 68 6f 67 65 73 3a 33 3a 22 31 32 33 22 3b 04 >.hoges:3:"123";.<
000010 66 75 67 61 69 3a 35 36 37 38 3b 03 66 6f 6f 62 >fugai:5678;.foob<
000020 3a 31 3b 03 62 61 72 64 3a 31 32 33 2e 34 35 36 >:1;.bard:123.456<
000030 3b 04 6e 75 6c 6c 4e 3b >;.nullN;<
0x04 (EOT)や0x03 (ETX)がキーバリュー間に挟み込まれています。それ以外は"php"とほぼ同じ。
- session.serialize_handler = php_serialize
$ less /var/lib/php/session/sess_{SESSION_ID}
a:5:{s:4:"hoge";s:3:"123";s:4:"fuga";i:5678;s:3:"foo";b:1;
s:3:"bar";d:123.456;s:4:"null";N;}
"php"と似ていますが、キーに関しても属性値(データ型、バイト数)を記載しているのが特徴です。
- session.serialize_handler = wddx
$ cat /var/lib/php5/sess_{SESSION_ID} | xmllint --format --encode utf-8 -
<?xml version="1.0" encoding="utf-8"?>
<wddxPacket version="1.0">
<header/>
<data>
<struct>
<var name="hoge">
<string>123</string>
</var>
<var name="fuga">
<number>5678</number>
</var>
<var name="foo">
<boolean value="true"/>
</var>
<var name="bar">
<number>123.456</number>
</var>
<var name="null">
<null/>
</var>
</struct>
</data>
</wddxPacket>
XML形式でのシリアライズになります。