Session Management
Overview
ABP React implements a robust session management system using iron-session for secure client-side session storage and Redis for server-side token management. This guide explains how sessions are handled in the application.
Session Configuration
The session configuration is defined in sessionOptions.ts
:
export const sessionOptions: SessionOptions = {
password: process.env.SESSION_PASSWORD || 'complex_password_at_least_32_characters_long',
cookieName: 'abp-react-session-id',
cookieOptions: {
secure: process.env.NODE_ENV === 'production',
},
ttl: 60 * 60 * 24 * 7, // 1 week
}
Session Data Structure
The session data includes authentication and tenant information:
interface SessionData {
isLoggedIn: boolean
access_token?: string
code_verifier?: string
state?: string
userInfo?: {
sub: string
name: string
email: string
email_verified: boolean
}
tenantId?: string
}
Session Operations
Getting Session Data
export async function getSession(): Promise<IronSession<SessionData>> {
const session = await getIronSession<SessionData>(await cookies(), sessionOptions)
// ... session validation and refresh logic
return session
}
Token Refresh
The application automatically handles token refresh:
- Checks token expiration
- Uses refresh token to obtain new access token
- Updates both Redis and session storage
- Maintains user session
Redis Integration
Redis is used for server-side token storage:
const redisSessionData = {
access_token: access_token,
refresh_token: refresh_token,
} as RedisSession
const redis = createRedisInstance()
const redisKey = `session:${session.userInfo.sub}`
await redis.set(redisKey, JSON.stringify(redisSessionData))
Security Features
-
Secure Cookie Storage
- Encrypted session data
- HTTPS-only in production
- Configurable session duration
-
Token Management
- Secure token storage
- Automatic token refresh
- Token expiration handling
-
Session Validation
- Regular session checks
- Invalid session cleanup
- Security header validation
Best Practices
-
Configuration
- Use strong session passwords
- Configure appropriate TTL
- Enable secure cookies in production
-
Error Handling
- Handle session corruption
- Implement graceful degradation
- Log session errors
-
Performance
- Minimize session operations
- Cache session data when possible
- Optimize Redis operations
Environment Variables
Required environment variables for session management:
SESSION_PASSWORD
: Secret key for session encryptionNEXT_PUBLIC_API_URL
: API endpoint for token operationsNEXT_PUBLIC_APP_URL
: Application base URL