use namespace::clean -except => 'meta';
-our $VERSION = '0.26';
+our $VERSION = '0.28';
+$VERSION = eval $VERSION;
my @session_data_accessors; # used in delete_session
/
);
+sub _session_plugin_config {
+ my $c = shift;
+ # FIXME - Start warning once all the state/store modules have also been updated.
+ #$c->log->warn("Deprecated 'session' config key used, please use the key 'Plugin::Session' instead")
+ # if exists $c->config->{session}
+ #$c->config->{'Plugin::Session'} ||= delete($c->config->{session}) || {};
+ $c->config->{'Plugin::Session'} ||= $c->config->{session} || {};
+}
sub setup {
my $c = shift;
sub setup_session {
my $c = shift;
- my $cfg = ( $c->config->{session} ||= {} );
+ my $cfg = $c->_session_plugin_config;
%$cfg = (
expires => 7200,
$c->maybe::next::method(@_);
- if ( $c->config->{session}{flash_to_stash}
+ if ( $c->_session_plugin_config->{flash_to_stash}
and $c->sessionid
and my $flash_data = $c->flash )
{
$c->_session($session_data);
no warnings 'uninitialized'; # ne __address
- if ( $c->config->{session}{verify_address}
+ if ( $c->_session_plugin_config->{verify_address}
&& $session_data->{__address} ne $c->request->address )
{
$c->log->warn(
$c->delete_session("address mismatch");
return;
}
- if ( $c->config->{session}{verify_user_agent}
+ if ( $c->_session_plugin_config->{verify_user_agent}
&& $session_data->{__user_agent} ne $c->request->user_agent )
{
$c->log->warn(
sub calculate_initial_session_expires {
my $c = shift;
- return ( time() + $c->config->{session}{expires} );
+ return ( time() + $c->_session_plugin_config->{expires} );
}
sub calculate_extended_session_expires {
sub session {
my $c = shift;
- $c->_session || $c->_load_session || do {
+ my $session = $c->_session || $c->_load_session || do {
$c->create_session_id_if_needed;
$c->initialize_session_data;
};
+
+ if (@_) {
+ my $new_values = @_ > 1 ? { @_ } : $_[0];
+ croak('session takes a hash or hashref') unless ref $new_values;
+
+ for my $key (keys %$new_values) {
+ $session->{$key} = $new_values->{$key};
+ }
+ }
+
+ $session;
}
sub keep_flash {
__updated => $now,
(
- $c->config->{session}{verify_address}
+ $c->_session_plugin_config->{verify_address}
? ( __address => $c->request->address||'' )
: ()
),
(
- $c->config->{session}{verify_user_agent}
+ $c->_session_plugin_config->{verify_user_agent}
? ( __user_agent => $c->request->user_agent||'' )
: ()
),
This method will automatically create a new session and session ID if none
exists.
+You can also set session keys by passing a list of key/value pairs or a
+hashref.
+
+ $c->session->{foo} = "bar"; # This works.
+ $c->session(one => 1, two => 2); # And this.
+ $c->session({ answer => 42 }); # And this.
+
=item session_expires
=item session_expires $reset
For example:
- __PACKAGE__->config->{session}{expires} = 1000000000000; # forever
+ __PACKAGE__->config('Plugin::Session' => { expires => 1000000000000 }); # forever
# later
=item setup_session
-This method populates C<< $c->config->{session} >> with the default values
+This method populates C<< $c->config('Plugin::Session') >> with the default values
listed in L</CONFIGURATION>.
=item prepare_action
=head1 CONFIGURATION
- $c->config->{session} = {
+ $c->config('Plugin::Session' => {
expires => 1234,
- };
+ });
All configuation parameters are provided in a hash reference under the
-C<session> key in the configuration hash.
+C<Plugin::Session> key in the configuration hash.
=over 4
kmx C<kmx@volny.cz>
+Florian Ragwitz (rafl) C<rafl@debian.org>
+
+Kent Fredric (kentnl)
+
And countless other contributers from #catalyst. Thanks guys!
=head1 COPYRIGHT & LICENSE