2004-12-13
[ツッコミを入れる]
2006-12-13
@ [cpan] CGI::Session::Driver::aggregator
以前セッションのデータを memcached と mysql に書き込む CGI::Session::Driver::memcached_mysql を作成したのですが、社内の人に「これって例えばfileとmysqlとか、違うドライバだったら毎回同じようなモジュール作らなきゃいけないので、どのドライバでも使えるような汎用的なモジュール作れない?」と言われたので作ってみました。
use CGI::Session;
use CGI::Session::Driver::aggregator::Drivers;
use DBI;
$dbh = DBI->connect('DBI:mysql:cgi_session;host=localhost', 'root', '');
$drivers = CGI::Session::Driver::aggregator::Drivers->new;
$drivers->add('file', { Directory => '/tmp' });
$drivers->add('mysql', { Handle => $dbh });
$s = CGI::Session->new('driver:aggregator', $sid, { Drivers => $drivers });
$s->param(hey => 'Blur blur blur!');
というように、$drivers に対してセッションのデータを書き込みたいドライバを追加していくと、データを読み込む時は $drivers->add した順、つまり file からまず読んでくれて、書き込むときは(追加したのとは逆の順序で) driver:aggregator がデータを各ドライバに書き込んでくれるという寸法です。
モジュールのインタフェースに関しては色々悩んだのですが、上記の形が現状のCGI::Sessionのプラグイン機構に一番しっくりくるのでこんな感じに。これでfileでもmysqlでもmemcachedでもなんでもいけるようになりましたとさ。
さきほどCPANに上げたのですが、こちらからもダウンロードできます。
2006/12/14追記:データを書き込む際の順番が逆になっていたのでver 0.03で修正しました。
[ツッコミを入れる]