[perl] SledgeのCookieベースのSessionを永続的に持たせる
SledgeでSessionをCookieで制御する場合
デフォルトだと、Cookieの有効期限は
ブラウザを閉じたときまで保持
だと思います。
Formに持たせる情報など、一時的なものであれば全く構わないのですが、
ログイン情報など、半永続的に持たせたい情報の場合はCookieの有効期限を調整できた方が何かと便利です。
ということで、ブラウザを閉じてもSessionを維持できるようにCookieを少し変更しました。
変更点
Sledge::SessionManager::Cookieで、Cookieの有効期限をコントロールできるように変更しました。
$options{'-expires'} = $config->cookie_expires if $config->cookie_expires;
以下の場所に追記しています。
.........
$options{'-domain'} = $config->cookie_domain if $config->cookie_domain;
++ $options{'-expires'} = $config->cookie_expires if $config->cookie_expires;
my $cookie = CGI::Cookie->new(%options);
.........
これにより、Config内で
$C{COOKIE_EXPIRES} = '+100d';
のように設定しておけば、SessionのCookieの有効期限を自由に設定できます。
※MemcachedをSessionに設定している場合、Memcached自体のExpireを
Cookieと同じか、それ以上に設定しておく必要があります。
patch
一応ですが、 diff を取ってPatch化してみました。
— Cookie.pm Sun Jun 14 23:27:50 2009
***************
*** 21,31 ****
my($self, $page, $sid) = @_;
my $config = $page->create_config;
my %options = (
! -name => $config->cookie_name,
-value => $sid,
-path => $config->cookie_path,
);
$options{'-domain'} = $config->cookie_domain if $config->cookie_domain;
my $cookie = CGI::Cookie->new(%options);
$page->r->header_out('Set-Cookie' => $cookie->as_string);
— 21,32 —-
my($self, $page, $sid) = @_;
my $config = $page->create_config;
my %options = (
! -name => $config->cookie_name,
-value => $sid,
-path => $config->cookie_path,
);
$options{'-domain'} = $config->cookie_domain if $config->cookie_domain;
+ $options{'-expires'} = $config->cookie_expires if $config->cookie_expires;
my $cookie = CGI::Cookie->new(%options);
$page->r->header_out('Set-Cookie' => $cookie->as_string);








