1 package Plack::Session::State::Cookie;
5 our $VERSION = '0.09_01';
6 our $AUTHORITY = 'cpan:STEVAN';
8 use parent 'Plack::Session::State';
12 use Plack::Util::Accessor qw[
21 my ($self, $env) = @_;
22 Plack::Request->new($env)->cookies->{$self->session_key};
26 my($self, %options) = @_;
30 $options{path} = $self->path || '/' if !exists $options{path} && defined $self->path;
31 $options{domain} = $self->domain if !exists $options{domain} && defined $self->domain;
32 $options{secure} = $self->secure if !exists $options{secure} && defined $self->secure;
33 $options{httponly} = $self->httponly if !exists $options{httponly} && defined $self->httponly;
35 if (!exists $options{expires} && defined $self->expires) {
36 $options{expires} = time + $self->expires;
42 sub expire_session_id {
43 my ($self, $id, $res, $options) = @_;
44 my %opts = $self->merge_options(%$options, expires => time);
45 $self->_set_cookie($id, $res, %opts);
49 my ($self, $id, $res, $options) = @_;
50 my %opts = $self->merge_options(%$options);
51 $self->_set_cookie($id, $res, %opts);
55 my($self, $id, $res, %options) = @_;
57 # TODO: Do not use Plack::Response
58 my $response = Plack::Response->new(@$res);
59 $response->cookies->{ $self->session_key } = +{
64 my $final_r = $response->finalize;
65 $res->[1] = $final_r->[1]; # headers
76 Plack::Session::State::Cookie - Basic cookie-based session state
81 use Plack::Middleware::Session;
84 return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ];
88 enable 'Session'; # Cookie is the default state
94 This is a subclass of L<Plack::Session::State> and implements it's
95 full interface. This is the default state used in
96 L<Plack::Middleware::Session>.
102 =item B<new ( %params )>
104 The C<%params> can include I<path>, I<domain>, I<expires> and
105 I<secure> options, as well as all the options accepted by
106 L<Plack::Session::Store>.
110 Path of the cookie, this defaults to "/";
114 Domain of the cookie, if nothing is supplied then it will not
115 be included in the cookie.
119 Expiration time of the cookie in seconds, if nothing is supplied then
120 it will not be included in the cookie, which means the session expires
125 Secure flag for the cookie, if nothing is supplied then it will not
126 be included in the cookie.
132 All complex software has bugs lurking in it, and this module is no
133 exception. If you find a bug please either email me, or add the bug
138 Stevan Little E<lt>stevan.little@iinteractive.comE<gt>
140 =head1 COPYRIGHT AND LICENSE
142 Copyright 2009, 2010 Infinity Interactive, Inc.
144 L<http://www.iinteractive.com>
146 This library is free software; you can redistribute it and/or modify
147 it under the same terms as Perl itself.