getSession method
Implementation
Future<Map<String, dynamic>?> getSession(String? sessionId) async {
if (sessionId == null) return null;
switch (driver) {
case 'memory':
final s = _memoryStore[sessionId];
if (s == null || _isExpired(s['expires_at'])) {
_memoryStore.remove(sessionId);
return null;
}
return s;
case 'file':
final sessions = await _readSessions();
final s = sessions[sessionId];
if (s == null) return null;
if (_isExpired(s['expires_at'])) {
sessions.remove(sessionId);
await _writeSessions(sessions);
return null;
}
return s;
case 'db':
final result = await DB.query(
'SELECT data, expires_at FROM $dbTable WHERE id = ?',
positionalParams: [sessionId],
);
if (result.isEmpty) return null;
final row = result.first;
final expiresAt = DateTime.parse(row['expires_at']);
if (expiresAt.isBefore(DateTime.now())) {
await DB.query('DELETE FROM $dbTable WHERE id = ?',
positionalParams: [sessionId]);
return null;
}
return jsonDecode(row['data']);
default:
throw Exception('Unknown SESSION_DRIVER: $driver');
}
}