<?php /** * Test Session Handler * * Provides session handling functionality for PHPUnit tests. * This class ensures proper session management during testing. */ class TestSessionHandler implements SessionHandlerInterface { private static $initialized = false; private $data = []; /** * Initialize session settings */ public static function init() { if (!self::$initialized && !headers_sent()) { // Clean up any existing session 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(); } // Set session configuration session_name('jilo'); // Start a new session if (session_status() !== PHP_SESSION_ACTIVE) { session_start([ 'cookie_httponly' => 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; } }