Use Case · Product

Session store on the Software Lifecycle Cloud

A session store on KERNSTACK is the unglamorous pattern done as declared data: session rows in a table keyed by session id, carrying the user, the device hint, and the expiry; functions read and write them at request time; and a periodic sweep removes the dead. No sticky load balancing, no server whose memory is a single point of truth, no separate cache cluster to babysit.

The engineering bottleneck with assembled stacks

API owners keep session state in process memory because it starts that way in the first demo. Then a second instance appears, logouts do not propagate, deploys log everyone out, and the fix — an external cache — arrives as another vendor with its own failure modes to explain a seven-line concept: who is this, and until when.

Architecture on the Software Lifecycle Cloud

Create-session writes a row with a random id, the user key, and an expiry timestamp. Each authenticated request does one keyed read; expiry is checked against the row, sliding if your policy slides. Revocation is a delete, effective everywhere instantly because there is exactly one copy of the truth. Worker and function handlers share the table, so websocket and HTTP faces of the app agree about who is connected.

Expiry as data beats expiry as configuration

Because expiry is a timestamp on the row, policy questions become data questions: how many sessions older than X exist, which devices hold this user’s sessions, what happens to remember-me tokens at password change. The sweep that deletes expired rows also produces the counts, and “log out everywhere” is a keyed delete over one user’s rows.

  • One keyed read per request; no cache cluster, no stickiness, no lost sessions on deploy
  • Revocation and logout-everywhere are deletes that take effect on the next request
  • Device hints on the row make “unknown device signed in” a query, not a forensic project

When not to build this

If your framework’s session handling already runs stateless tokens and your revocation story is honestly “wait for expiry”, keep it. A table-backed store earns its rows when instant revocation, device visibility, or cross-surface sessions (web, mobile, websocket) are requirements rather than decorations.

Frequently asked questions

It is a single keyed table read — the fastest access pattern the platform has — performed inside the function handling the request. No extra service hop and no cache invalidation logic stand between the request and the answer.

Handlers reject expired rows on sight, and a scheduled sweep deletes them in batches so the table stays lean. Both behaviours are project code, reviewed and adjusted like everything else in the stack.

Yes. Sessions are rows with device hints, so listing a user’s active sessions and revoking any of them is ordinary table work surfaced by your own API — the feature support teams keep asking for, without a new system.

Related capabilities, architectures, and comparisons

Ship your stack on the Software Lifecycle Cloud.

Closed preview on dedicated European infrastructure. Bring a repository or start from a blueprint.