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;
|
||
|
}
|
||
|
}
|