createSession method

Future<String> createSession(
  1. HttpResponse response,
  2. Map<String, dynamic> data, {
  3. Duration? ttl,
})

Implementation

Future<String> createSession(
  HttpResponse response,
  Map<String, dynamic> data, {
  Duration? ttl,
}) async {
  final id = _generateSessionId();
  final expiresAt = DateTime.now().add(ttl ?? defaultTtl);

  switch (driver) {
    case 'memory':
      _memoryStore[id] = {
        ...data,
        'expires_at': expiresAt.toIso8601String(),
      };
      break;

    case 'file':
      final sessions = await _readSessions();
      sessions[id] = {
        ...data,
        'expires_at': expiresAt.toIso8601String(),
      };
      await _writeSessions(sessions);
      break;

    case 'db':
      await DB.query(
        'INSERT INTO $dbTable (id, user_id, data, expires_at) VALUES (?, ?, ?, ?)',
        positionalParams: [
          id,
          data['id'],
          jsonEncode(data),
          expiresAt.toIso8601String(),
        ],
      );
      break;

    default:
      throw Exception('Unknown SESSION_DRIVER: $driver');
  }

  // Set secure cookie
  response.cookies.add(Cookie('FLINTSESSID', id)
    ..path = '/'
    ..httpOnly = true
    ..secure = false);

  return id;
}