[MovableType]mt_sessionテーブルのデータを調べてみた

mt_sessionテーブルの概要

mt_sessionテーブルには、さまざまな用途の一時データが保管されている。

"session"という名前から、いわゆるPHPなどでいう「セッションデータ」が格納されているのかと思っていたが、そうではない。
mt_sessionテーブルの中には実に雑多な一時情報が格納されている。
「セッションデータ」というよりも「一時データ」と言う方が実態に近い。

mt_sessionテーブルの定義

mysql> desc mt_session;
+------------------+--------------+------+-----+---------+-------+
| Field            | Type         | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+-------+
| session_data     | mediumblob   | YES  |     | NULL    |       |
| session_email    | varchar(255) | YES  |     | NULL    |       |
| session_id       | varchar(80)  | NO   | PRI | NULL    |       |
| session_kind     | varchar(2)   | YES  | MUL | NULL    |       |
| session_name     | varchar(255) | YES  | MUL | NULL    |       |
| session_start    | int(11)      | NO   | MUL | NULL    |       |
| session_duration | int(11)      | YES  | MUL | NULL    |       |
+------------------+--------------+------+-----+---------+-------+
一つづつ見ていこう。
sessino_data
データ本体である。
内容は実にさまざまで、RSSフィードの中身が格納されていたり、ブログ記事のエントリが格納されていたり、タグリストが入っていたり、テンプレートデータが入っていたりする。

データは"SERG"という文字列で始まることが多い。特殊な方法でシリアライズされているようにも見える。
自動保存された記事も、"SERG"で始まるシリアライズデータとして保存されているようである。
sessino_id
1から振られる連番数値かと思いきや、そうではない。
いろんな値が入っている。
"agFT5WXi0bcVlE2JPF2pDBCP1mbTX8hIBD"みたいなハッシュ値が入ってたり、
"autosave:user=1:type=entry:id=133:blog_id=5"みたいなのだったり、
"blog:13;datasource:entry"だったり、やりたい放題である。

恐らく、"autosave:user=1:type=entry:id=0:blog_id=5"のようにentry:id=0のものが、新規記事の自動保存データで、
"autosave:user=1:type=entry:id=435:blog_id=5"のようにentry:idが1以上のものが、既存記事の編集の際の自動保存データだと思われる。
→実際に確認してみたところ、確かにそうなっていました。
sessino_email
たいていNULLだが、ときどきブログユーザのメールアドレスが入っている。
意味はよくわからない。
sessino_name
たいていNULLだが、ときどきブログユーザ名が入っている。
意味はよくわからない。
sessino_start
これは、レコード作成日がUnixTimeとして格納されているものと思われる。
いわゆる"created_on"と同じようなものである。
sessino_duration
たいていのレコードではNULL値が入っている。
ときどきUnixTimeが入っている。
意味はよくわからない。
sessino_kind
アルファベット2文字の値が張っている。
"AS", "CS", "SI", "UA" などいろいろある。
"AS"が、"autosave"すなわち「自動保存」を表していると思われる。

自動保存された記事を見つける方法

session_kindが"AS"で、
session_idが"autosave:user=1:type=entry:id=0:blog_id=5"のようになっているレコードを抽出すれば、
そこのsession_dataに自動保存されて記事が格納されているようである。
カテゴリ: