Files
kaya/packages/kaya-session-redis/README.md
T
woggioni 7def1d7483
CI / Build and publish packages (push) Successful in 2m57s
Add OIDC back-channel logout with session indexes
2026-11-02 12:30:38 +08:00

1.9 KiB

kaya-session-redis

Redis-backed session storage for the Kaya web framework.

Provides RedisSessionStore, a SessionStore implementation (from kaya-session) that persists session data in Redis, so sessions are shared across processes and hosts.

Usage

from redis.asyncio import Redis

from kaya.core import KayaApp, HttpContext
from kaya.session import SessionMixin
from kaya.session.redis import RedisSessionStore

client = Redis(host='localhost', port=6379)
session = SessionMixin(RedisSessionStore(client))
app = KayaApp(mixins=[session])

@app.GET('/')
async def home(ctx: HttpContext):
    n = ctx.session.get('visits', 0) + 1
    ctx.session['visits'] = n
    await ctx.send_str(200, f'visits: {n}')

Sessions are stored under keys with the prefix kaya:session: (configurable via the prefix argument). Server-side expiry uses Redis key TTLs and slides on each access when the session mixin passes a max_age.

Session indexes

RedisSessionStore supports Session.add_index(), SessionStore.find_sessions(), and delete_by_index(). Reverse memberships are Redis sets updated in the same transactional pipeline as session saves. They are removed on deletion, and stale members are pruned during lookups. Bucket keys use a SHA-256 digest of the index name and value.

Serialization

Session data is serialized with pickle by default, so arbitrary Python objects can be stored. The serialized value is an envelope containing the session dictionary and index metadata; legacy plain-dict values are still accepted. A different serializer can be plugged in via the dumps/loads arguments:

import json

store = RedisSessionStore(
    client,
    dumps=lambda d: json.dumps(d).encode('utf-8'),
    loads=lambda b: json.loads(b.decode('utf-8')),
)

Warning: pickle deserialization of untrusted data is unsafe. Only use the default serializer with a trusted Redis server.