use NEXT;
-sub finalize {
+our $VERSION = "0.01";
+
+sub setup_session {
+ my $c = shift;
+
+ $c->NEXT::setup_session(@_);
+
+ $c->config->{session}{cookie_name} ||= "session";
+}
+
+sub finalize_cookies {
my $c = shift;
+ my $cookie_name = $c->config->{session}{cookie_name};
+
if ( my $sid = $c->sessionid ) {
- my $cookie = $c->request->cookies->{session};
+ my $cookie = $c->request->cookies->{$cookie_name};
if ( !$cookie or $cookie->value ne $sid ) {
- $c->response->cookies->{session} = { value => $sid };
+ $c->response->cookies->{$cookie_name} = {
+ value => $sid,
+ expires => $c->session->{__expires},
+ };
+ if ( my $domain = $c->config->{session}{cookie_domain} ) {
+ $c->response->cookies->{$cookie_name}->{domain} = $domain;
+ }
$c->log->debug(qq/A cookie with the session id "$sid" was saved/)
if $c->debug;
}
}
- return $c->NEXT::finalize(@_);
+ return $c->NEXT::finalize_cookies(@_);
}
sub prepare_cookies {
my $c = shift;
- if ( my $cookie = $c->request->cookies->{session} ) {
+ my $ret = $c->NEXT::prepare_cookies(@_);
+
+ my $cookie_name = $c->config->{session}{cookie_name};
+
+ if ( my $cookie = $c->request->cookies->{$cookie_name} ) {
my $sid = $cookie->value;
$c->sessionid($sid);
$c->log->debug(qq/Found sessionid "$sid" in cookie/) if $c->debug;
}
- $c->NEXT::prepare_cookies(@_);
+ return $ret;
}
__PACKAGE__
=head1 SYNOPSIS
- use Catalyst qw/Session Session::State::Cookie Session::Store::Foo/;
+ use Catalyst qw/Session Session::State::Cookie Session::Store::Foo/;
=head1 DESCRIPTION
Will restore if an appropriate cookie is found.
-=item finalize
+=item finalize_cookies
+
+Will set a cookie called C<session> if it doesn't exist or if it's value is not
+the current session id.
+
+=item setup_session
+
+Will set the C<cookie_name> parameter to it's default value if it isn't set.
+
+=back
+
+=head1 CONFIGURATION
+
+=over 4
+
+=item cookie_name
+
+The name of the cookie to store (defaults to C<session>).
+
+=item cookie_domain
-Will set a cookie called C<session> if it doesn't exist or if it's value is not the current session id.
+The name of the domain to store in the cookie (defaults to current host)
=back