The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Plack::Middleware::Session::Simple - Make Session Simple

SYNOPSIS

    use Plack::Builder;
    use Cache::Memcached::Fast;

    my $app = sub {
        my $env = shift;
        my $counter = $env->{'psgix.session'}->{counter}++;
        [200,[], ["counter => $counter"]];
    };
    
    builder {
        enable 'Session::Simple',
            store => Cache::Memcached::Fast->new({servers=>[..]}),
            cookie_name => 'myapp_session';
        $app
    };

DESCRIPTION

Plack::Middleware::Session::Simple is a yet another session management module. This middleware has compatibility with Plack::Middleware::Session by supporting psgix.session and psgi.session.options. You can reduce unnecessary accessing to store and Set-Cookie header.

This module uses Cookie to keep session state. does not support URI based session state.

OPTIONS

store

object instance that has get, set, and remove methods.

This is the name of the session key, it defaults to 'simple_session'.

keep_empty

If disabled, Plack::Middleware::Session::Simple does not output Set-Cookie header and store session until session are used. You can reduce Set-Cookie header and access to session store that is not required. (default: true/enabled)

    builder {
        enable 'Session::Simple',
            cache => Cache::Memcached::Fast->new({servers=>[..]}),
            session_key => 'myapp_session',
            keep_empty => 0;
        mount '/' => sub {
            my $env = shift;
            [200,[], ["ok"]];
        },
        mount '/login' => sub {
            my $env = shift;
            $env->{'psgix.session'}->{user} = 'session user'
            [200,[], ["login"]];
        },
    };
    
    my $res = $app->(req_to_psgi(GET "/")); #res does not have Set-Cookie    
    my $res = $app->(req_to_psgi(GET "/login")); #res has Set-Cookie

If you have a plan to use session_id as csrf token, you must not disable keep_empty.

path

Path of the cookie, this defaults to "/";

domain

Domain of the cookie, if nothing is supplied then it will not be included in the cookie.

expires

Cookie's expires date time. several formats are supported. see Cookie::Baker for details. if nothing is supplied then it will not be included in the cookie, which means the session expires per browser session.

secure

Secure flag for the cookie, if nothing is supplied then it will not be included in the cookie.

httponly

HttpOnly flag for the cookie, if nothing is supplied then it will not be included in the cookie.

sid_generator

CodeRef that used to generate unique session ids, by default it uses SHA1

sid_validator

Regexp that used to validate session id in Cookie

serializer

serialize,deserialize method. Optional. This is useful with Cache::FastMmap

  my $cfm = Cache::FastMmap->new(raw_values => 1);
  my $decoder = Sereal::Decoder->new();
  my $encoder = Sereal::Encoder->new();
  builder {
    enable 'Session::Simple',
        store => $fm,
        serializer => [ sub { $encoder->encode($_[0]) }, sub { $decoder->decode($_[0]) } ],
    $app;
  };

LICENSE

Copyright (C) Masahiro Nagano.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

Masahiro Nagano <kazeburo@gmail.com>