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.