$c->_clear_session_instance_data;
}
+sub _session_updated {
+ my $c = shift;
+
+ if ( my $session_data = $c->_session ) {
+
+ no warnings 'uninitialized';
+ if ( Object::Signature::signature($session_data) ne
+ $c->_session_data_sig )
+ {
+ return $session_data;
+ } else {
+ return;
+ }
+
+ } else {
+
+ return;
+
+ }
+}
+
sub _save_session_id {
my $c = shift;
sub _save_session {
my $c = shift;
- if ( my $session_data = $c->_session ) {
+ if ( my $session_data = $c->_session_updated ) {
- no warnings 'uninitialized';
- if ( Object::Signature::signature($session_data) ne
- $c->_session_data_sig )
- {
- $session_data->{__updated} = time();
- my $sid = $c->sessionid;
- $c->store_session_data( "session:$sid" => $session_data );
- }
+ $session_data->{__updated} = time();
+ my $sid = $c->sessionid;
+ $c->store_session_data( "session:$sid" => $session_data );
}
}
my $expires = $c->_get_stored_session_expires;
my $cutoff = $expires - $threshold;
- if (!$threshold || $cutoff <= time) {
+ if (!$threshold || $cutoff <= time || $c->_session_updated) {
$c->_extended_session_expires( my $updated = $c->calculate_initial_session_expires() );
$c->extend_session_id( $sid, $updated );
ok($res->is_success, "session_expires");
is($res->decoded_content, $expiry, "session_expires == session_data_expires");
-sleep(10);
+#
+
+$res = $ua->get( "http://localhost/update_session" );
+ok($res->is_success, "update_session");
$res = $ua->get( "http://localhost/session_data_expires" );
ok($res->is_success, "session_data_expires");
my $updated = $res->decoded_content + 0;
ok($updated > $expiry, "expiration updated");
+$expiry = $updated;
+
+$res = $ua->get( "http://localhost/session_data_expires" );
+ok($res->is_success, "session_data_expires");
+
+is($res->decoded_content, $expiry, "expiration not updated");
+
+$res = $ua->get( "http://localhost/session_expires" );
+ok($res->is_success, "session_expires");
+is($res->decoded_content, $expiry, "session_expires == session_data_expires");
+
+sleep(10);
+
+$res = $ua->get( "http://localhost/session_data_expires" );
+ok($res->is_success, "session_data_expires");
+
+$updated = $res->decoded_content + 0;
+ok($updated > $expiry, "expiration updated");
+
$res = $ua->get( "http://localhost/session_expires" );
ok($res->is_success, "session_expires");
is($res->decoded_content, $updated, "session_expires == session_data_expires");