CGI::Session のセッション名
CGI::Session ではかつてセッション(クッキー)名がパッケージグローバルな変数,$CGI::Session::NAME によって規定されていました。CLASS->name() メソッドで設定はできたんですが,不便でした。たとえば,複数セッションを使いたい場合,セッション取得時とセッションクッキー設定時に,各セッションにつき,いちいち CLASS->name() で設定する必要があったり。結局,毎度毎度そんな面倒なことはしていられないので,継承して独自のセッションクラスを作ったりしていました。
さて最近気づいたんですが,4.10 あたりで,
* NEW: name is now an instance method (RT#17979) (Matt LeBlanc)
となってます。めでたく CLASS->name() と $obj->name() が使えるようになったようです。といっても,CLASS->new() や CLASS->load() でセッション名を指定できるようにはなっていないので,
my $q = CGI->new; CGI::Session->name('SID1'); my $s1 = CGI::Session->new($q); CGI::Session->name('SID2'); my $s2 = CGI::Session->new($q); ... print $q->header( -cookie => [$s1->cookie, $s2->cookie] );
のようにする必要があります。まだまだ不格好ですが,フレームワーク側で吸収できるくらいの不便さに進歩したといえます。
mod_perl について全然詳しくないんですが,少なくとも prefork MPM だと,中程の4行はアトミックに実行されることを期待していいんですかね?
><