Merge branch 'master' into tags/0.32 tags/0.32 mirror/tags/0.32 v0.32
Devin Austin [Fri, 30 Mar 2012 21:32:41 +0000 (14:32 -0700)]
1  2 
lib/Catalyst/Plugin/Session.pm

@@@ -13,7 -13,7 +13,7 @@@ use Carp
  
  use namespace::clean -except => 'meta';
  
- our $VERSION = '0.32';
+ our $VERSION = '0.34';
  $VERSION = eval $VERSION;
  
  my @session_data_accessors; # used in delete_session
@@@ -102,8 -102,10 +102,10 @@@ sub prepare_action 
  sub finalize_headers {
      my $c = shift;
  
-     # fix cookie before we send headers
-     $c->_save_session_expires;
+     # Force extension of session_expires before finalizing headers, so a possible cookie will be
+     # up to date. First call to session_expires will extend the expiry, subsequent calls will
+     # just return the previously extended value.
+     $c->session_expires;
  
      return $c->maybe::next::method(@_);
  }
@@@ -124,6 -126,7 +126,7 @@@ sub finalize_session 
  
      $c->maybe::next::method(@_);
  
+     $c->_save_session_expires;
      $c->_save_session_id;
      $c->_save_session;
      $c->_save_flash;
@@@ -348,7 -351,7 +351,7 @@@ sub session_expires 
      if ( defined( my $expires = $c->_extended_session_expires ) ) {
          return $expires;
      } elsif ( defined( $expires = $c->_load_session_expires ) ) {
 -        return $c->extend_session_expires( $expires );
 +        return $c->calculate_initial_session_expires;
      } else {
          return 0;
      }
@@@ -368,7 -371,7 +371,7 @@@ sub calculate_initial_session_expires 
  
  sub calculate_extended_session_expires {
      my ( $c, $prev ) = @_;
 -    $c->calculate_initial_session_expires;
 +    return ( time() + $prev );
  }
  
  sub reset_session_expires {
@@@ -724,6 -727,15 +727,15 @@@ $c->flash (thus allowing multiple redir
  all the keys which haven't changed since the flash data was loaded at the end
  of every request.
  
+ Note that use of the flash is an easy way to get data across requests, but
+ it's also strongly disrecommended, due it it being inherently plagued with
+ race conditions. This means that it's unlikely to work well if your
+ users have multiple tabs open at once, or if your site does a lot of AJAX
+ requests.
+ L<Catalyst::Plugin::StatusMessage> is the recommended alternative solution,
+ as this doesn't suffer from these issues.
      sub moose : Local {
          my ( $self, $c ) = @_;
  
@@@ -789,7 -801,7 +801,7 @@@ expiry time for the whole session)
  
  For example:
  
-     __PACKAGE__->config('Plugin::Session' => { expires => 10000000000 }); # "forever" 
+     __PACKAGE__->config('Plugin::Session' => { expires => 10000000000 }); # "forever"
      (NB If this number is too large, Y2K38 breakage could result.)
  
      # later
@@@ -1132,6 -1144,10 +1144,10 @@@ Kent Fredric (kentnl
  
  And countless other contributers from #catalyst. Thanks guys!
  
+ =head1 Contributors
+ Devin Austin (dhoss) <dhoss@cpan.org>
  =head1 COPYRIGHT & LICENSE
  
      Copyright (c) 2005 the aforementioned authors. All rights