spark_session
Session management middleware for Spark applications.
Features
- Cookie-based session IDs
- Multiple session stores: in-memory, file-based, SQLite
- Multi-session support (multiple named sessions per request)
- Sliding window expiration (refreshed on each request)
- Automatic cleanup of expired sessions
- Session destruction and cookie clearing
- Migration utility from file store to SQLite
Installation
dependencies:
spark_session: ^1.0.0Usage
Single Session
import 'package:spark_session/spark_session.dart';
final handler = Pipeline()
.addMiddleware(sessionMiddleware(
store: SqliteSessionStore(path: 'sessions.db'),
cookieName: 'spark_session',
maxAge: Duration(hours: 24),
secure: true,
httpOnly: true,
sameSite: SameSite.strict,
))
.addHandler(myRouter);Multiple Named Sessions
final handler = Pipeline()
.addMiddleware(multiSessionMiddleware([
SessionConfig(name: 'user', maxAge: Duration(days: 30)),
SessionConfig(name: 'cart', maxAge: Duration(hours: 2)),
SessionConfig(name: 'admin', secure: true),
]))
.addHandler(myRouter);Working with Session Data
Response handleRequest(Request request) {
final session = request.session;
// Set values
session.set('userId', '123');
session.set('role', 'admin');
// Get values (type-safe)
final userId = session.get<String>('userId');
// Remove a value
session.remove('role');
// Clear all data
session.clear();
// Check status
session.isNew; // newly created
session.isChanged; // modified
session.data; // read-only view
return Response.ok('OK');
}Destroying a Session (Logout)
Response handleLogout(Request request) {
request.session.destroy();
return Response.ok('Logged out');
}Session Stores
// In-Memory (development)
InMemorySessionStore(cleanupInterval: Duration(minutes: 5))
// File-Based (persistent, single server)
FileSessionStore(path: './sessions')
// SQLite (persistent, scalable)
SqliteSessionStore(path: 'sessions.db')Migration
// Migrate from file store to SQLite
await migrateFileSessionsToSqlite(
fileStorePath: './sessions',
sqlitePath: 'sessions.db',
);