System Design FAQ: Top Questions
28. How would you design a Session Management System?
A Session Management System tracks and validates user sessions to provide authenticated access, support timeout policies, and optionally persist sessions across restarts.
๐ Functional Requirements
- Create, validate, and expire user sessions
- Support persistent (remember me) vs. temporary sessions
- Enable logout and session revocation
๐ฆ Non-Functional Requirements
- High throughput for login/session checks
- Low-latency validation at request time
- Scalable and resilient to failure
๐๏ธ Core Components
- Session Token Generator: Issues secure random tokens (UUID, JWT)
- Session Store: Redis, DynamoDB, or SQL with TTL index
- Validator: Middleware to check session token on requests
- Revocation Logic: Kills session token or marks it invalid
๐งช Redis Session Store (Node.js)
// session.js
const redis = require("redis");
const { v4: uuidv4 } = require("uuid");
const client = redis.createClient();
function createSession(userId) {
const sessionId = uuidv4();
client.setex(`sess:${sessionId}`, 3600, userId); // TTL 1 hour
return sessionId;
}
function validateSession(sessionId, callback) {
client.get(`sess:${sessionId}`, (err, userId) => {
if (err || !userId) return callback(null);
return callback(userId);
});
}
๐ JWT-Based Stateless Sessions (Python)
import jwt
import datetime
SECRET_KEY = "supersecret"
def generate_token(user_id):
payload = {
"user_id": user_id,
"exp": datetime.datetime.utcnow() + datetime.timedelta(hours=1)
}
return jwt.encode(payload, SECRET_KEY, algorithm="HS256")
def verify_token(token):
try:
return jwt.decode(token, SECRET_KEY, algorithms=["HS256"])
except jwt.ExpiredSignatureError:
return None
๐ Session Schema (PostgreSQL)
CREATE TABLE sessions (
id UUID PRIMARY KEY,
user_id UUID REFERENCES users(id),
created_at TIMESTAMP DEFAULT now(),
expires_at TIMESTAMP,
is_active BOOLEAN DEFAULT true
);
CREATE INDEX ON sessions (expires_at);
๐งฏ Revocation
- Blacklist tokens in Redis with short TTL
- Session versioning (stored on server, invalidated on logout)
๐ Observability
- Session creation rate
- Session timeout and logout counts
- Token validation failures
๐งฐ Tools/Infra Used
- Session DB: Redis / PostgreSQL / DynamoDB
- Token Signing: JWT (pyjwt, jose)
- API Auth: Express / Flask middleware
๐ Final Insight
Session management must be fast, secure, and revocable. Stateless tokens (e.g., JWT) work well for short-lived sessions, while server-side stores are ideal when revocation and audit trails are critical.
