NAME

PAGI::Middleware::Session - Session management middleware

SYNOPSIS

use PAGI::Middleware::Builder;

my $app = builder {
    enable 'Session',
        secret => 'your-secret-key',
        cookie_name => 'session_id';
    $my_app;
};

# In your app:
async sub app {
    my ($scope, $receive, $send) = @_;

    my $session = $scope->{'pagi.session'};
    $session->{user_id} = 123;
    $session->{logged_in} = 1;
}

DESCRIPTION

PAGI::Middleware::Session provides server-side session management with cookie-based session IDs. Sessions are stored in memory by default.

CONFIGURATION

  • secret (required)

    Secret key for session ID generation and validation.

  • cookie_name (default: 'pagi_session')

    Name of the session cookie.

  • cookie_options (default: { httponly => 1, path => '/' })

    Options for the session cookie.

  • expire (default: 3600)

    Session expiration time in seconds.

  • store (default: in-memory)

    Session store object. Must implement get($id), set($id, $data), delete($id).

SCOPE EXTENSIONS

This middleware adds the following to $scope:

  • pagi.session

    Hashref of session data. Modify this directly to update the session. Keys starting with _ are reserved for internal use.

  • pagi.session_id

    The session ID string.

SESSION DATA

Special session keys:

  • _id - Session ID (read-only)

  • _created - Unix timestamp when session was created

  • _last_access - Unix timestamp of last access

  • _regenerated - Set to 1 to regenerate session ID

SEE ALSO

PAGI::Middleware - Base class for middleware

PAGI::Middleware::Cookie - Cookie parsing