Source for file UserSession.class.php
Documentation is available at UserSession.class.php
* @copyright Energine 2006
* Класс управления сеансами пользователей.
* Имя сеанса по-умолчанию.
* Вероятность вызова сборщика мусора.
* Вычисляется как DEFAULT_PROBABILITY / session.gc_divisor (defaults to 100).
* Например, 10 / 100 означает 10%-вероятность вызова СМ.
* @var string идентификатор сеанса
* @var int идентификатор сеанса в БД
* Если период между запросами превышает эту величину, сеанс становится недействительным.
* @var int время ожидания
* Используется для настройки времени жизни cookie и сборки мусора.
* @var int максимальное время жизни сеанса
* @var UserSession единый для всей системы экземпляр класса UserSession
private static $instance;
* @var string пользовательский агент
* @var string имя таблицы сеансов в БД
$this->userAgent = isset ($_SERVER['HTTP_USER_AGENT'])? $_SERVER['HTTP_USER_AGENT']: 'ROBOT';
$this->name = self::DEFAULT_SESSION_NAME;
ini_set('session.gc_probability', self::DEFAULT_PROBABILITY);
// устанавливаем обработчики сеанса
array(&$this, 'destroy'),
//register_shutdown_function('session_write_close');
// устанавливаем время жизни cookie
// проверяем существование cookie и корректность его данных
if (isset ($_COOKIE[$this->name])) {
// проверяем, действителен ли текущий сеанс
$res = $this->dbh->selectRequest(
' WHERE session_native_id = %s'.
' AND (NOW() - session_created) < %s'.
' AND (NOW() - session_last_impression) <= %s'.
' AND session_user_agent = %s',
$response = Response::getInstance();
* Возвращает единый для всей системы экземпляр класса UserSession.
public static function getInstance() {
if (!isset(self::$instance)) {
self::$instance = new UserSession;
* @param string $savePath
* @param string $sessionName
public function open($savePath, $sessionName) {
public function close() {
* Поскольку данный метод вызыватся сразу же после установки
* идентификатора сеанса, он используется вместо метода open.
* @param string идентификатор сеанса
public function read($phpSessId) {
$res = $this->dbh->select(
array('session_id', 'session_data'),
array('session_native_id' => $this->phpSessId)
// если указанный сеанс существует в БД
$this->id = $res['session_id'];
$result = $res['session_data'];
// если такого сеанса в БД не существует
// создаем новую запись сеанса
$this->id = $this->dbh->modifyRequest(
"INSERT INTO { $this->tableName} (session_native_id, session_created, session_user_agent) VALUES(%s, NOW(), %s) ",
* Записывает данные сеанса.
* @param string идентификатор сеанса
public function write($phpSessId, $data) {
$this->dbh->modify(QAL::UPDATE, $this->tableName, array('session_data' => $data), array('session_native_id' => $phpSessId));
* @param string идентификатор сеанса
public function destroy($phpSessId) {
return $this->dbh->modify(QAL::DELETE, $this->tableName, null, array('session_native_id' => $phpSessId));
* @param int максимальное время жизни сеанса
public function gc($maxLifeTime) {
'((NOW() - session_created) > '. $this->lifespan. ') OR ((NOW() - session_last_impression) > '. $this->timeout. ')'
public function start() {
$this->dbh->modifyRequest('UPDATE '. $this->tableName. ' SET session_last_impression = NOW() WHERE session_native_id = %s', $this->phpSessId);
* Возвращает идентификатор сеанса.
public function getID() {
|