NAME
Jedi::Plugin::Session - Session for Jedi
VERSION
version 0.05
DESCRIPTION
This plugin add to the Jedi::Request two methods : session_get and session_set
A secure UUID is generated on all get/post request, and if the cookie jedi_session is missing, then it will automatically create it to keep the same UUID between each request.
If the cookie with the UUID is copied on a different browser / computer, it will work but the session will not be the same.
SYNOPSIS
The session is very specific to an app, different app in the same Jedi instance, will use different session data.
package MyJediApp;
use Jedi::App;
use Jedi::Plugin::Session;
use JSON;
sub jedi_app {
my ($app) = @_;
$app->get('/set_session', sub {
my ($app, $request, $response) = @_;
my $session = $request->session_get // {};
$session->{val1} = { this => 'is', a => 'test' };
$request->session_set($session);
$response->status(200);
$response->body('session set !')
});
$app->get('/get_session', sub {
my ($app, $request, $response) = @_;
my $session = $request->session_get;
$response->status(200);
$response->body(defined $session ? encode_json($session) : 'session not defined !');
})
}
1;
LIMITATION
The session is keep in memory and serialized. You can't save CODE or unserializable object in the session.
The default expiration is '3 hours'. The cookie with a part of the UUID is keep for 2 years and sent only once.
EXPIRATION
To change the default expiration for your app, you can use the configuration like this :
MyJediApp: # package name of your app
session:
expiration: 3 hours
Check Time::Duration::Parse for the possible value of the expiration.
If you need to set the full expiration time again, you can just set again the session :
$request->session_set($request->session_get // {});
BACKENDS
Memory
The default backend is memory. It use CHI with the Memory driver.
Redis
You can use Redis as a backend.
package MyJediApp;
use Jedi::App;
use Jedi::Plugin::Session 'Redis';
Everything work the same way.
You can setup Redis access in the configuration like this :
MyJediApp: # package name of your app
session:
expiration: 3 hours
redis:
config:
reconnect: 2
every: 100
server: 127.0.0.1:6900
prefix: my_jedi_app
The redis_prefix will be used to generate the session key. The result will be :
jedi_prefix_YOUR_PREFIX_UUID
SQLite
You can use DBD::SQLite as a backend.
package MyJediApp;
use Jedi::App;
use Jedi::Plugin::Session 'SQLite';
You can configuration SQLite database file in the configuration :
MyJediApp: # package name of your app
session:
expiration: 3 hours
sqlite:
path: /var/lib/jedi_session
The path is the base path for your app. In that case the final file is :
/var/lib/jedi_session/MyJediApp.db
If your app name is My::Jedi::App, then the final file is :
/var/lib/jedi_session/My/Jedi/App.db
By default the file is store in the Jedi::Plugin::Session dist_dir. Each app has his own database.
If you start multiple workers, all of them will use the same database and then share the session.
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/celogeek/perl-jedi-plugin-session/issues
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
AUTHOR
celogeek <me@celogeek.com>
COPYRIGHT AND LICENSE
This software is copyright (c) 2013 by celogeek <me@celogeek.com>.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.