Hateburo: kazeburo hatenablog

SRE / 運用系小姑 / Goを書くPerl Monger

Plack::Middleware::Session::Simple has been released

English document is available on metacpan!



Plack::Middleware::Session::Simpleをリリースしました。Plack::Middleware::Session(Store::Cache & State::Cookie)と互換性を保ちながら、効率よく動作することを狙っています。

  • 必要なときに必要なだけ Set-Cookie ヘッダを発行する
  • 必要なときだけストレージにアクセスする

弊社のようなハイトラフィックなサービスを運営している場合には、できるだけリソースをケチりたいので、そういう思想なものが必要となった。互換性があるので負荷が低いところで使っても問題が起きないと思う。

使い方

Plack::Middleware::Sessionで以下のように設定していたなら、

my $cache = Cache::Memory::Simple->new;
builder {
    enable 'Session',
       store => Plack::Session::Store::Cache->new(
            cache => $cache,
        ),
        state => Plack::Session::State::Cookie->new(
            session_key => 'myapp_session'
        );
    $app
}

Session::Simpleではこうなる。Plack::Session::(Store|State)がなくなり、一部のオプションの名前が変更になっている。

builder {
    enable 'Session::Simple',
        store => $cache,
        cookie_name => 'myapp_session',
        keep_empty => 0 # 0にすると空のセッションを保存しない&Cookieを送出しない
    ;
    $app
};

キャッシュに保存する内容は同じなので、ミドルウェアの入れ替えによってセッションが切れたりすることはない。

StickyQuery のサポートについて

URI based session management は、セキュリティ上も問題があるし、Cookie を送信しないような DoCoMo の古い端末はもはや無視できると判断し、サポートしない。 必要であれば Plack::Middleware::Session をご利用いただけばよい。