Use finalize_cookies instead of finalize in Session::State::Cookie
[catagits/Catalyst-Plugin-Session-State-Cookie.git] / lib / Catalyst / Plugin / Session / State / Cookie.pm
index 3ba6dd1..aa1d9a3 100644 (file)
@@ -9,34 +9,42 @@ use NEXT;
 our $VERSION = "0.01";
 
 sub setup_session {
-       my $c = shift;
+    my $c = shift;
 
-       $c->NEXT::setup_session(@_);
+    $c->NEXT::setup_session(@_);
 
-       $c->config->{session}{cookie_name} ||= "session";
+    $c->config->{session}{cookie_name} ||= "session";
 }
 
-sub finalize {
+sub finalize_cookies {
     my $c = shift;
 
-       my $cookie_name = $c->config->{session}{cookie_name};
+    my $cookie_name = $c->config->{session}{cookie_name};
 
     if ( my $sid = $c->sessionid ) {
         my $cookie = $c->request->cookies->{$cookie_name};
         if ( !$cookie or $cookie->value ne $sid ) {
-            $c->response->cookies->{$cookie_name} = { 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;
 
-       my $cookie_name = $c->config->{session}{cookie_name};
+    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;
@@ -44,7 +52,7 @@ sub prepare_cookies {
         $c->log->debug(qq/Found sessionid "$sid" in cookie/) if $c->debug;
     }
 
-    $c->NEXT::prepare_cookies(@_);
+    return $ret;
 }
 
 __PACKAGE__
@@ -59,7 +67,7 @@ Catalyst::Plugin::Session::State::Cookie - A session ID
 
 =head1 SYNOPSIS
 
-       use Catalyst qw/Session Session::State::Cookie Session::Store::Foo/;
+    use Catalyst qw/Session Session::State::Cookie Session::Store::Foo/;
 
 =head1 DESCRIPTION
 
@@ -76,9 +84,14 @@ This plugin stores the session ID on the client using the cookie mechanism.
 
 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.
 
-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
 
@@ -90,6 +103,10 @@ Will set a cookie called C<session> if it doesn't exist or if it's value is not
 
 The name of the cookie to store (defaults to C<session>).
 
+=item cookie_domain
+
+The name of the domain to store in the cookie (defaults to current host)
+
 =back
 
 =head1 SEE ALSO