releng for Cookie
[catagits/Catalyst-Plugin-Session-State-Cookie.git] / lib / Catalyst / Plugin / Session / State / Cookie.pm
index 7ff701f..aa0e61a 100644 (file)
@@ -7,7 +7,7 @@ use warnings;
 use NEXT;
 use Catalyst::Utils ();
 
-our $VERSION = "0.02";
+our $VERSION = "0.06";
 
 sub setup_session {
     my $c = shift;
@@ -25,7 +25,7 @@ sub extend_session_id {
         $c->update_session_cookie( $c->make_session_cookie( $sid ) );
     }
 
-    $c->NEXT::extend_session_id( @_ );
+    $c->NEXT::extend_session_id( $sid, $expires );
 }
 
 sub set_session_id {
@@ -33,13 +33,26 @@ sub set_session_id {
 
     $c->update_session_cookie( $c->make_session_cookie( $sid ) );
 
-    return $c->NEXT::set_session_id(@_);
+    return $c->NEXT::set_session_id($sid);
 }
 
 sub update_session_cookie {
     my ( $c, $updated ) = @_;
-    my $cookie_name = $c->config->{session}{cookie_name};
-    $c->response->cookies->{$cookie_name} = $updated;
+    
+    unless ( $c->cookie_is_rejecting( $updated ) ) {
+        my $cookie_name = $c->config->{session}{cookie_name};
+        $c->response->cookies->{$cookie_name} = $updated;
+    }
+}
+
+sub cookie_is_rejecting {
+    my ( $c, $cookie ) = @_;
+    
+    if ( $cookie->{path} ) {
+        return 1 if index '/'.$c->request->path, $cookie->{path};
+    }
+    
+    return 0;
 }
 
 sub make_session_cookie {
@@ -49,6 +62,7 @@ sub make_session_cookie {
     my $cookie = {
         value => $sid,
         ( $cfg->{cookie_domain} ? ( domain => $cfg->{cookie_domain} ) : () ),
+        ( $cfg->{cookie_path} ? ( path => $cfg->{cookie_path} ) : () ),
         %attrs,
     };
 
@@ -190,6 +204,10 @@ user's browser is shut down.
 
 If this attribute set true, the cookie will only be sent via HTTPS.
 
+=item cookie_path
+
+The path of the request url where cookie should be baked.
+
 =back
 
 =head1 CAVEATS