9Июнь/11Off
Менеджер сессий
Класс менеджера сессий, входящий в GMFramework. Класс написан linblow (http://php.net/manual/ru/function.session-start.php), я только немного его изменял.
/**
* Use the static method getInstance to get the object.
* @package ru.vbinc.gm.framework.utils
* @author linblow (edited by GreyMag)
* from PHP.net
*
*/
class Session
{
const SESSION_STARTED = true;
const SESSION_NOT_STARTED = false;
// THE only instance of the class
private static $_instance;
/**
* Returns THE instance of 'Session'.
* The session is automatically initialized if it wasn't.
*
* @return Session
**/
public static function getInstance()
{
if ( !isset(self::$_instance))
{
self::$_instance = new Session();
}
self::$_instance->startSession();
return self::$_instance;
}
// The state of the session
private $_sessionState = self::SESSION_NOT_STARTED;
private function __construct() {}
/**
* (Re)starts the session.
*
* @return bool TRUE if the session has been initialized, else FALSE.
**/
public function startSession()
{
if ( $this->_sessionState == self::SESSION_NOT_STARTED )
{
$this->_sessionState = session_start();
}
return $this->_sessionState;
}
/**
* Получить значение переменной по имени
* @param mixed $var
*/
public function get( $var )
{
return $this->$var;
}
/**
* Задать значение переменной
* @param mixed $var
*/
public function set( $var, $value )
{
$this->$var = $value;
}
/**
* Уничтожить переменную по имени
* @param $var
*/
public function unsetVar( $var )
{
unset( $this->$var );
}
/**
* 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( $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();
unset( $_SESSION );
return !$this->_sessionState;
}
return false;
}
}
Пример использования:
// получаем инстанцию класаа $data = Session::getInstance(); // помещаем необходимые данные в переменные, // которые будут сохранены в сессии $data->login = 'User'; $data->userId = 1; // распечатываем значения переменных, сохранённых в сессии printf( '<p>Пользовать %s имеет идентификатор %d.</p>', $data->login, $data->userId ); // уничтожаем сессию $data->destroy();