1, 'cookie_secure' => 1, 'cookie_samesite' => 'Strict', 'gc_maxlifetime' => 1440 // 24 minutes ]); } self::$initialized = true; } } /** * Start a fresh session */ public static function startSession() { // Clean up any existing session first self::cleanupSession(); // Initialize new session if (session_status() !== PHP_SESSION_ACTIVE && !headers_sent()) { session_name('jilo'); session_start([ 'cookie_httponly' => 1, 'cookie_secure' => 1, 'cookie_samesite' => 'Strict', 'gc_maxlifetime' => 1440 ]); self::$initialized = true; } } /** * Clean up the current session */ public static function cleanupSession() { if (session_status() === PHP_SESSION_ACTIVE) { session_write_close(); } if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-3600, '/'); } $_SESSION = array(); if (session_status() === PHP_SESSION_ACTIVE) { session_destroy(); } self::$initialized = false; } public function open($path, $name): bool { return true; } public function close(): bool { return true; } public function read($id): string|false { return $this->data[$id] ?? ''; } public function write($id, $data): bool { $this->data[$id] = $data; return true; } public function destroy($id): bool { unset($this->data[$id]); return true; } public function gc($max_lifetime): int|false { return 0; } }