Akelosのセッション管理をDBで行う

AkelosでセッションをDBを行う場合、現バージョン0.8なら以下のような感じになる。


まず、データベース上にセッション管理テーブルを作る。Mysqlならこんな感じ

CREATE TABLE `sessions` (
  `id`     CHAR(32) PRIMARY KEY ,
  `value`  TEXT     NOT NULL ,
  `expire` DATETIME NOT NULL ,
  INDEX (`expire`)
) TYPE = InnoDB;

あとは設定ファイルに以下を書き込む

config/config.php

<?php
// 略
define('AK_SESSION_HANDLER', true);

?>

すると、akelos/libs/AkDbSession.phpを使用してセッション管理を行ってくれる。ただ、このあたりはまだ書きかけっぽいので正式には使わない方が良いかもしれない。

現行バージョンにはバグがあってセッションへの書き込みを行っても前回から変更がなければクエリを発行してくれないので、しばらくすると有効期限が切れてしまう。なんでこんな感じにしてるのかは不明。毎アクセス毎にセッションの内容が書き換わることを想定してるのか?

あまりソースを書き換えるのはうれしくはないがとりあえず_writeメソッドを書き換えて対応しておく事にする。

akelos/libs/AkDbSession.php

<?php
// 200行目付近
  function _write($id, $data)
  {
    $ret = $this->_db->Replace('sessions', array(
             'id'     => $this->_db->qstr($id),
             'expire' => $this->_db->DBTimeStamp(time()),
             'value'  => $this->_db->qstr($data)
           ), 'id');
    return (boolean)$ret;
  }
// 略
?>