1 package Plack::Session::Store::Cache;
5 use Scalar::Util qw/blessed/;
7 use parent 'Plack::Session::Store';
9 use Plack::Util::Accessor qw[ cache ];
12 my ($class, %params) = @_;
14 die('cache require get, set and remove method.')
15 unless blessed $params{cache}
16 && $params{cache}->can('get')
17 && $params{cache}->can('set')
18 && $params{cache}->can('remove');
20 bless { %params } => $class;
24 my ($self, $session_id, $key) = @_;
25 my $cache = $self->cache->get($session_id);
27 return $cache->{ $key };
31 my ($self, $session_id, $key, $data) = @_;
32 my $cache = $self->cache->get($session_id);
34 $cache = {$key => $data};
37 $cache->{$key} = $data;
39 $self->cache->set($session_id => $cache);
43 my ($self, $session_id, $key) = @_;
44 my $cache = $self->cache->get($session_id);
45 return unless exists $cache->{$key};
47 delete $cache->{ $key };
48 $self->cache->set($session_id => $cache);
52 my ($self, $session_id) = @_;
53 $self->cache->remove($session_id);
64 Plack::Session::Store::Cache - Cache session store
69 use Plack::Session::Store::Cache;
73 return [ 200, [ 'Content-Type' => 'text/plain' ], [ 'Hello Foo' ] ];
78 store => Plack::Session::Store::Cache->new(
79 cache => CHI->new(driver => 'FastMmap')
86 This will persist session data using the L<Cache> module. This
87 offers a lot of flexibility due to the many excellent L<CHI>
90 This is a subclass of L<Plack::Session::Store> and implements
97 =item B<new ( %params )>
99 The constructor expects an the I<cache> param to be an
100 instance have get, set, and remove method, it will throw an exception
101 if that is not the case.
109 All complex software has bugs lurking in it, and this module is no
110 exception. If you find a bug please either email me, or add the bug