<?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(); } }