127 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			127 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			PHP
		
	
| <?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;
 | |
|     }
 | |
| }
 |