Skip to main content

Overview

The session middleware provides server-side session management with secure cookie-based tracking. Sessions can store user data across requests with configurable storage backends. Use it when you need:
  • User login sessions
  • Shopping cart persistence
  • Multi-step form wizards

Installation

Quick Start

Configuration

Options

Examples

Basic Sessions

Custom Store

Session Operations

Logout

API Reference

Functions

Session Methods

Store Interface

Technical Details

Session Lifecycle

The session middleware manages a complete lifecycle for each session:
  1. Session Creation: When a new request arrives without a session cookie, a new session ID is generated using crypto/rand (32 bytes, 64 hex characters) and stored in the context
  2. Cookie Management: Session cookies are set before the handler executes to ensure headers are properly sent
  3. Data Persistence: Session data is saved to the store only when changes are detected via the changed flag
  4. Cleanup: The memory store includes automatic cleanup that runs every 10 minutes to remove sessions inactive for more than 24 hours

Thread Safety

The Session struct uses sync.RWMutex for concurrent access:
  • Read operations (Get): Use read locks to allow multiple concurrent reads
  • Write operations (Set, Delete, Clear, Destroy): Use write locks for exclusive access
  • The changed flag tracks modifications to optimize store operations

Store Implementation

The package includes a MemoryStore implementation with:
  • Deep copying: Get returns a deep copy of session data to prevent external mutations
  • Background cleanup: Automatic goroutine removes expired sessions every 10 minutes
  • Concurrent safety: All operations are protected by sync.RWMutex

Session ID Generation

Session IDs are generated using:
This provides cryptographically secure random IDs suitable for production use.

Context Integration

Sessions are stored in the request context using a private contextKey{} struct, preventing collisions with other middleware or application code.

Security Considerations

  1. Use HTTPS - Always set CookieSecure: true in production
  2. HTTPOnly cookies - Keep default to prevent XSS access
  3. Strict SameSite - Use SameSiteStrictMode for sensitive apps
  4. Regenerate ID - After login to prevent session fixation
  5. Set expiration - Don’t use infinite sessions

Best Practices

  • Use secure cookie settings in production
  • Store minimal data in sessions
  • Implement session store cleanup for expired sessions
  • Consider Redis or database store for distributed systems

Testing

The session middleware includes comprehensive test coverage for all operations:
  • jwt - Stateless token authentication
  • csrf - CSRF protection
  • secure - Security settings