2009-05-10 10:50:39 +03:00
|
|
|
|
<?php
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/*-------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* LiveStreet Engine Social Networking
|
|
|
|
|
* Copyright © 2008 Mzhelskiy Maxim
|
|
|
|
|
*
|
|
|
|
|
*--------------------------------------------------------
|
|
|
|
|
*
|
|
|
|
|
* Official site: www.livestreet.ru
|
|
|
|
|
* Contact e-mail: rus.engine@gmail.com
|
|
|
|
|
*
|
|
|
|
|
* GNU General Public License, version 2:
|
|
|
|
|
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
|
*
|
|
|
|
|
---------------------------------------------------------
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Модуль для работы с сессиями
|
|
|
|
|
* Заменяет стандартный механизм сессий(session)
|
|
|
|
|
*
|
|
|
|
|
*/
|
2010-05-27 17:02:43 +03:00
|
|
|
|
class ModuleSession extends Module {
|
2008-09-21 09:36:57 +03:00
|
|
|
|
protected $sId=null;
|
|
|
|
|
protected $aData=array();
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Использовать или нет стандартный механизм сессий
|
|
|
|
|
*
|
|
|
|
|
* @var bool
|
|
|
|
|
*/
|
2009-08-19 17:53:16 +03:00
|
|
|
|
protected $bUseStandartSession;
|
2008-09-21 09:36:57 +03:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Инициализация модуля
|
|
|
|
|
*
|
|
|
|
|
*/
|
2009-08-19 16:15:47 +03:00
|
|
|
|
public function Init() {
|
2009-08-19 17:53:16 +03:00
|
|
|
|
$this->bUseStandartSession = Config::Get('sys.session.standart');
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Стартуем сессию
|
|
|
|
|
*/
|
|
|
|
|
$this->Start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Старт сессии
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function Start() {
|
|
|
|
|
if ($this->bUseStandartSession) {
|
2009-08-19 17:53:16 +03:00
|
|
|
|
session_name(Config::Get('sys.session.name'));
|
|
|
|
|
session_set_cookie_params(
|
|
|
|
|
Config::Get('sys.session.timeout'),
|
|
|
|
|
Config::Get('sys.session.path'),
|
|
|
|
|
Config::Get('sys.session.host')
|
|
|
|
|
);
|
2010-03-06 18:21:31 +02:00
|
|
|
|
if(!session_id()) {
|
2011-07-24 00:55:56 +03:00
|
|
|
|
/**
|
|
|
|
|
* Даем возможность флешу задавать id сессии
|
|
|
|
|
*/
|
|
|
|
|
if (isset($_SERVER['HTTP_USER_AGENT']) and in_array($_SERVER['HTTP_USER_AGENT'],array('Shockwave Flash','Adobe Flash Player')) and preg_match("/^[\w\d]{5,40}$/",getRequest('SSID'))) {
|
|
|
|
|
session_id(getRequest('SSID'));
|
|
|
|
|
} else {
|
|
|
|
|
session_regenerate_id();
|
|
|
|
|
}
|
2010-03-06 18:21:31 +02:00
|
|
|
|
}
|
2008-09-21 09:36:57 +03:00
|
|
|
|
session_start();
|
|
|
|
|
} else {
|
|
|
|
|
$this->SetId();
|
|
|
|
|
$this->ReadData();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Устанавливает уникальный идентификатор сессии
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function SetId() {
|
|
|
|
|
/**
|
|
|
|
|
* Если идентификатор есть в куках то берем его
|
|
|
|
|
*/
|
2009-08-19 17:53:16 +03:00
|
|
|
|
if (isset($_COOKIE[Config::Get('sys.session.name')])) {
|
|
|
|
|
$this->sId=$_COOKIE[Config::Get('sys.session.name')];
|
2008-09-21 09:36:57 +03:00
|
|
|
|
} else {
|
|
|
|
|
/**
|
|
|
|
|
* Иначе создаём новый и записываем его в куку
|
|
|
|
|
*/
|
|
|
|
|
$this->sId=$this->GenerateId();
|
2009-08-19 17:53:16 +03:00
|
|
|
|
setcookie(
|
|
|
|
|
Config::Get('sys.session.name'),
|
|
|
|
|
$this->sId,time()+Config::Get('sys.session.timeout'),
|
|
|
|
|
Config::Get('sys.session.path'),
|
|
|
|
|
Config::Get('sys.session.host')
|
|
|
|
|
);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2009-10-20 02:42:23 +03:00
|
|
|
|
/**
|
|
|
|
|
* Получает идентификатор текущей сессии
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function GetId() {
|
2010-07-05 22:53:56 +03:00
|
|
|
|
if ($this->bUseStandartSession) {
|
|
|
|
|
return session_id();
|
|
|
|
|
} else {
|
|
|
|
|
return $this->sId;
|
|
|
|
|
}
|
2009-10-20 02:42:23 +03:00
|
|
|
|
}
|
|
|
|
|
|
2008-09-21 09:36:57 +03:00
|
|
|
|
/**
|
|
|
|
|
* Гинерирует уникальный идентификатор
|
|
|
|
|
*
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
protected function GenerateId() {
|
|
|
|
|
return md5(func_generator().time());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Читает данные сессии
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function ReadData() {
|
|
|
|
|
$this->aData=$this->Cache_Get($this->sId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Сохраняет данные сессии
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
protected function Save() {
|
2009-08-19 17:53:16 +03:00
|
|
|
|
$this->Cache_Set($this->aData,$this->sId,array(),Config::Get('sys.session.timeout'));
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает значение из сессии
|
|
|
|
|
*
|
|
|
|
|
* @param string $sName
|
|
|
|
|
* @return unknown
|
|
|
|
|
*/
|
|
|
|
|
public function Get($sName) {
|
|
|
|
|
if ($this->bUseStandartSession) {
|
|
|
|
|
return isset($_SESSION[$sName]) ? $_SESSION[$sName] : null;
|
|
|
|
|
} else {
|
|
|
|
|
return isset($this->aData[$sName]) ? $this->aData[$sName] : null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Записывает значение в сессию
|
|
|
|
|
*
|
|
|
|
|
* @param string $sName
|
|
|
|
|
* @param unknown_type $data
|
|
|
|
|
*/
|
|
|
|
|
public function Set($sName,$data) {
|
|
|
|
|
if ($this->bUseStandartSession) {
|
|
|
|
|
$_SESSION[$sName]=$data;
|
|
|
|
|
} else {
|
|
|
|
|
$this->aData[$sName]=$data;
|
|
|
|
|
$this->Save();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Удаляет значение из сессии
|
|
|
|
|
*
|
|
|
|
|
* @param string $sName
|
|
|
|
|
*/
|
|
|
|
|
public function Drop($sName) {
|
|
|
|
|
if ($this->bUseStandartSession) {
|
|
|
|
|
unset($_SESSION[$sName]);
|
|
|
|
|
} else {
|
|
|
|
|
unset($this->aData[$sName]);
|
|
|
|
|
$this->Save();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Получает разом все данные сессии
|
|
|
|
|
*
|
|
|
|
|
* @return array
|
|
|
|
|
*/
|
|
|
|
|
public function GetData() {
|
|
|
|
|
if ($this->bUseStandartSession) {
|
|
|
|
|
return $_SESSION;
|
|
|
|
|
} else {
|
|
|
|
|
return $this->aData;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Завершает сессию, дропая все данные
|
|
|
|
|
*
|
|
|
|
|
*/
|
|
|
|
|
public function DropSession() {
|
|
|
|
|
if ($this->bUseStandartSession) {
|
|
|
|
|
unset($_SESSION);
|
|
|
|
|
session_destroy();
|
|
|
|
|
} else {
|
|
|
|
|
unset($this->sId);
|
|
|
|
|
unset($this->aData);
|
2009-08-19 17:53:16 +03:00
|
|
|
|
setcookie(
|
|
|
|
|
Config::Get('sys.session.name'),
|
|
|
|
|
'',1,
|
|
|
|
|
Config::Get('sys.session.path'),
|
|
|
|
|
Config::Get('sys.session.host')
|
|
|
|
|
);
|
2008-09-21 09:36:57 +03:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
?>
|