Swiftorial Logo
Home
Swift Lessons
AI Tools
Learn More
Career
Resources

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.