mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2024-12-27 15:10:28 +01:00
64 lines
1.6 KiB
PHP
64 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace Xentral\Components\Http\Session;
|
|
|
|
use Xentral\Components\Http\Exception\SessionException;
|
|
|
|
class SessionHandler
|
|
{
|
|
/**
|
|
* Create a session object with actual session data
|
|
*
|
|
* @throws SessionException
|
|
*
|
|
* @return Session Session object
|
|
*/
|
|
public static function createSession()
|
|
{
|
|
if (!extension_loaded('session')) {
|
|
throw new SessionException('PHP extension "session" is missing.');
|
|
}
|
|
|
|
if (self::isSessionStarted()) {
|
|
throw new SessionException('Failed to create session. Session can be started only once.');
|
|
}
|
|
if (session_status() === PHP_SESSION_DISABLED) {
|
|
throw new SessionException('Failed to create session. Sessions are disabled.');
|
|
}
|
|
|
|
$isStarted = session_start();
|
|
if ($isStarted === false) {
|
|
throw new SessionException('Failed to create session. Initialization failed.');
|
|
}
|
|
|
|
if (session_status() === PHP_SESSION_NONE) {
|
|
throw new SessionException('Failed to create session. Unexpected status: PHP_SESSION_NONE');
|
|
}
|
|
|
|
return new Session($_SESSION);
|
|
}
|
|
|
|
/**
|
|
* @return bool
|
|
*/
|
|
public static function isSessionStarted()
|
|
{
|
|
$status = session_status();
|
|
|
|
return $status === PHP_SESSION_ACTIVE;
|
|
}
|
|
|
|
/**
|
|
* Save and close the session
|
|
*
|
|
* @param Session $session
|
|
*
|
|
* @return void
|
|
*/
|
|
public static function commitSession(Session $session)
|
|
{
|
|
$session->dumpSession($_SESSION);
|
|
session_write_close();
|
|
}
|
|
}
|