Prepare State::Cookie for distribution
[catagits/Catalyst-Plugin-Session-State-Cookie.git] / lib / Catalyst / Plugin / Session / State / Cookie.pm
1 package Catalyst::Plugin::Session::State::Cookie;
2 use base qw/Catalyst::Plugin::Session::State/;
3
4 use strict;
5 use warnings;
6
7 use NEXT;
8
9 our $VERSION = "0.01";
10
11 sub setup_session {
12         my $c = shift;
13
14         $c->NEXT::setup_session(@_);
15
16         $c->config->{session}{cookie_name} ||= "session";
17 }
18
19 sub finalize {
20     my $c = shift;
21
22         my $cookie_name = $c->config->{session}{cookie_name};
23
24     if ( my $sid = $c->sessionid ) {
25         my $cookie = $c->request->cookies->{$cookie_name};
26         if ( !$cookie or $cookie->value ne $sid ) {
27             $c->response->cookies->{$cookie_name} = { value => $sid };
28             $c->log->debug(qq/A cookie with the session id "$sid" was saved/)
29               if $c->debug;
30         }
31     }
32
33     return $c->NEXT::finalize(@_);
34 }
35
36 sub prepare_cookies {
37     my $c = shift;
38
39         my $cookie_name = $c->config->{session}{cookie_name};
40
41     if ( my $cookie = $c->request->cookies->{$cookie_name} ) {
42         my $sid = $cookie->value;
43         $c->sessionid($sid);
44         $c->log->debug(qq/Found sessionid "$sid" in cookie/) if $c->debug;
45     }
46
47     $c->NEXT::prepare_cookies(@_);
48 }
49
50 __PACKAGE__
51
52 __END__
53
54 =pod
55
56 =head1 NAME
57
58 Catalyst::Plugin::Session::State::Cookie - A session ID 
59
60 =head1 SYNOPSIS
61
62         use Catalyst qw/Session Session::State::Cookie Session::Store::Foo/;
63
64 =head1 DESCRIPTION
65
66 In order for L<Catalyst::Plugin::Session> to work the session ID needs to be
67 stored on the client, and the session data needs to be stored on the server.
68
69 This plugin stores the session ID on the client using the cookie mechanism.
70
71 =head1 EXTENDED METHODS
72
73 =over 4
74
75 =item prepare_cookies
76
77 Will restore if an appropriate cookie is found.
78
79 =item finalize
80
81 Will set a cookie called C<session> if it doesn't exist or if it's value is not the current session id.
82
83 =back
84
85 =head1 CONFIGURATION
86
87 =over 4
88
89 =item cookie_name
90
91 The name of the cookie to store (defaults to C<session>).
92
93 =back
94
95 =head1 SEE ALSO
96
97 L<Catalyst>, L<Catalyst::Plugin::Session>.
98
99 =head1 AUTHOR
100
101 Sebastian Riedel E<lt>C<sri@cpan.org>E<gt>,
102 Marcus Ramberg E<lt>C<mramberg@cpan.org>E<gt>,
103 Andrew Ford E<lt>C<andrewf@cpan.org>E<gt>,
104 Yuval Kogman E<lt>C<nothingmuch@woobling.org>E<gt>
105
106 =head1 COPYRIGHT
107
108 This program is free software, you can redistribute it and/or modify it
109 under the same terms as Perl itself.
110
111 =cut
112
113 1;