You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
2.5 KiB
121 lines
2.5 KiB
<?php
|
|
/*
|
|
Use the static method getInstance to get the object.
|
|
*/
|
|
namespace App\Router;
|
|
|
|
class Session
|
|
{
|
|
const SESSION_STARTED = TRUE;
|
|
const SESSION_NOT_STARTED = FALSE;
|
|
|
|
// The state of the session
|
|
private $sessionState = self::SESSION_NOT_STARTED;
|
|
|
|
// THE only instance of the class
|
|
private static $instance;
|
|
|
|
|
|
private function __construct() {}
|
|
|
|
|
|
/**
|
|
* Returns THE instance of 'Session'.
|
|
* The session is automatically initialized if it wasn't.
|
|
*
|
|
* @return object
|
|
**/
|
|
|
|
public static function getInstance()
|
|
{
|
|
if ( !isset(self::$instance))
|
|
{
|
|
self::$instance = new self;
|
|
}
|
|
|
|
self::$instance->startSession();
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
|
|
/**
|
|
* (Re)starts the session.
|
|
*
|
|
* @return bool TRUE if the session has been initialized, else FALSE.
|
|
**/
|
|
|
|
private function startSession()
|
|
{
|
|
if ( $this->sessionState == self::SESSION_NOT_STARTED )
|
|
{
|
|
$this->sessionState = session_start();
|
|
}
|
|
|
|
return $this->sessionState;
|
|
}
|
|
|
|
|
|
/**
|
|
* Stores datas in the session.
|
|
* Example: $instance->foo = 'bar';
|
|
*
|
|
* @param name Name of the datas.
|
|
* @param value Your datas.
|
|
* @return void
|
|
**/
|
|
|
|
public function __set( $name , $value )
|
|
{
|
|
$_SESSION[$name] = $value;
|
|
}
|
|
|
|
|
|
/**
|
|
* Gets datas from the session.
|
|
* Example: echo $instance->foo;
|
|
*
|
|
* @param name Name of the datas to get.
|
|
* @return mixed Datas stored in session.
|
|
**/
|
|
|
|
public function __get( string $name )
|
|
{
|
|
if ( isset($_SESSION[$name]))
|
|
{
|
|
return $_SESSION[$name];
|
|
}
|
|
}
|
|
|
|
|
|
public function __isset( $name )
|
|
{
|
|
return isset($_SESSION[$name]);
|
|
}
|
|
|
|
|
|
public function __unset( $name )
|
|
{
|
|
unset( $_SESSION[$name] );
|
|
}
|
|
|
|
|
|
/**
|
|
* Destroys the current session.
|
|
*
|
|
* @return bool TRUE is session has been deleted, else FALSE.
|
|
**/
|
|
|
|
public function destroy()
|
|
{
|
|
if ( $this->sessionState == self::SESSION_STARTED )
|
|
{
|
|
$this->sessionState = !session_destroy();
|
|
session_unset(); // Clear all session variables
|
|
return !$this->sessionState;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
}
|