[perl] SledgeのCookieベースのSessionを永続的に持たせる

2009年6 月14日  |  Written by matsumoto  |  under Perl Yahoo!ブックマークに登録    はてなブックマーク - [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:25:00 2009
— 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);
 

現在コメントはありません | コメントの投稿はこちら

コメントを書き込む

コメント本文

※コメントのフォーム内で以下のタグがご利用いただけます
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

私はチーム・マイナス6%です