ModuleSession

Package framework.modules
Inheritance class ModuleSession » Module » LsObject
Since 1.0
Source Code /framework/classes/modules/session/Session.class.php
Модуль для работы с сессиями Выступает в качестве врапера для стандартного механизма сессий

Protected Properties

Hide inherited properties

PropertyTypeDescriptionDefined By
_aBehaviors Список поведений в виде готовых объектов, формируется автоматически LsObject
aBehaviors array Список поведений LsObject
aData array Данные сессии ModuleSession
aFlashUserAgent array Список user-agent'ов для флеш плеера ModuleSession
bIsInit bool Указывает на то, была ли проведенна инициализация модуля Module
bUseStandartSession bool Использовать или нет стандартный механизм сессий ModuleSession
sId null|string ID сессии ModuleSession

Public Methods

Hide inherited methods

MethodDescriptionDefined By
AddBehaviorHook() Добавляет хук поведения LsObject
AttachBehavior() Присоединяет поведение к объекту LsObject
DetachBehavior() Отсоединяет поведение от объекта LsObject
Drop() Удаляет значение из сессии ModuleSession
DropSession() Завершает сессию, дропая все данные ModuleSession
Get() Получает значение из сессии ModuleSession
GetBehavior() Возвращает объект поведения по его имени LsObject
GetBehaviors() Возвращает все объекты поведения LsObject
GetData() Получает разом все данные сессии ModuleSession
GetId() Получает идентификатор текущей сессии ModuleSession
Init() Инициализация модуля ModuleSession
RemoveBehaviorHook() Удаляет хук поведения LsObject
RunBehaviorHook() Запускает хук поведения на выполнение LsObject
Set() Записывает значение в сессию ModuleSession
SetInit() Помечает модуль как инициализированный Module
Shutdown() Метод срабатывает при завершении работы ядра Module
__call() Ставим хук на вызов неизвестного метода и считаем что хотели вызвать метод какого либо модуля LsObject
__clone() Блокируем копирование/клонирование объекта Module
__construct() Конструктор, запускается автоматически при создании объекта LsObject
__get() Обработка доступа к объекты поведения LsObject
isInit() Возвращает значение флага инициализации модуля Module

Protected Methods

Hide inherited methods

MethodDescriptionDefined By
GenerateId() Гинерирует уникальный идентификатор ModuleSession
PrepareBehaviors() Инициализация поведений LsObject
ReadData() Читает данные сессии в aData ModuleSession
Save() Сохраняет данные сессии ModuleSession
SetId() Устанавливает уникальный идентификатор сессии ModuleSession
Start() Старт сессии ModuleSession

Property Details

aData property
protected array $aData;

Данные сессии

aFlashUserAgent property
protected array $aFlashUserAgent;

Список user-agent'ов для флеш плеера Используется для передачи ID сессии при обращениии к сайту через flash, например, загрузка файлов через flash

bUseStandartSession property
protected bool $bUseStandartSession;

Использовать или нет стандартный механизм сессий ВНИМАНИЕ! Не рекомендуется ставить false - т.к. этот режим до конца не протестирован

sId property
protected null|string $sId;

ID сессии

Method Details

Drop() method
public void Drop(string $sName)
$sName string Имя параметра
Source Code: /framework/classes/modules/session/Session.class.php#222 (show)
public function Drop($sName)
{
    if (
$this->bUseStandartSession) {
        unset(
$_SESSION[$sName]);
    } else {
        unset(
$this->aData[$sName]);
        
$this->Save();
    }
}

Удаляет значение из сессии

DropSession() method
public void DropSession()
Source Code: /framework/classes/modules/session/Session.class.php#250 (show)
public function DropSession()
{
    if (
$this->bUseStandartSession) {
        unset(
$_SESSION);
        
session_destroy();
    } else {
        unset(
$this->sId);
        unset(
$this->aData);
        
setcookie(
            
Config::Get('sys.session.name'),
            
''1,
            
Config::Get('sys.session.path'),
            
Config::Get('sys.session.host')
        );
    }
}

Завершает сессию, дропая все данные

GenerateId() method
protected string GenerateId()
{return} string
Source Code: /framework/classes/modules/session/Session.class.php#163 (show)
protected function GenerateId()
{
    return 
md5(func_generator() . time());
}

Гинерирует уникальный идентификатор

Get() method
public mixed|null Get(string $sName)
$sName string Имя параметра
{return} mixed|null
Source Code: /framework/classes/modules/session/Session.class.php#192 (show)
public function Get($sName)
{
    if (
$this->bUseStandartSession) {
        return isset(
$_SESSION[$sName]) ? $_SESSION[$sName] : null;
    } else {
        return isset(
$this->aData[$sName]) ? $this->aData[$sName] : null;
    }
}

Получает значение из сессии

GetData() method
public array GetData()
{return} array
Source Code: /framework/classes/modules/session/Session.class.php#237 (show)
public function GetData()
{
    if (
$this->bUseStandartSession) {
        return 
$_SESSION;
    } else {
        return 
$this->aData;
    }
}

Получает разом все данные сессии

GetId() method
public void GetId()
Source Code: /framework/classes/modules/session/Session.class.php#149 (show)
public function GetId()
{
    if (
$this->bUseStandartSession) {
        return 
session_id();
    } else {
        return 
$this->sId;
    }
}

Получает идентификатор текущей сессии

Init() method
public void Init()
Source Code: /framework/classes/modules/session/Session.class.php#64 (show)
public function Init()
{
    
$this->bUseStandartSession Config::Get('sys.session.standart');
    
/**
     * Стартуем сессию
     */
    
$this->Start();
}

Инициализация модуля

ReadData() method
protected void ReadData()
Source Code: /framework/classes/modules/session/Session.class.php#172 (show)
protected function ReadData()
{
    
$this->aData $this->Cache_Get($this->sId);
}

Читает данные сессии в aData

Save() method
protected void Save()
Source Code: /framework/classes/modules/session/Session.class.php#181 (show)
protected function Save()
{
    
$this->Cache_Set($this->aData$this->sId, array(), Config::Get('sys.session.timeout'));
}

Сохраняет данные сессии

Set() method
public void Set(string $sName, mixed $data)
$sName string Имя параметра
$data mixed Данные
Source Code: /framework/classes/modules/session/Session.class.php#207 (show)
public function Set($sName$data)
{
    if (
$this->bUseStandartSession) {
        
$_SESSION[$sName] = $data;
    } else {
        
$this->aData[$sName] = $data;
        
$this->Save();
    }
}

Записывает значение в сессию

SetId() method
protected void SetId()
Source Code: /framework/classes/modules/session/Session.class.php#124 (show)
protected function SetId()
{
    
/**
     * Если идентификатор есть в куках то берем его
     */
    
if (isset($_COOKIE[Config::Get('sys.session.name')])) {
        
$this->sId $_COOKIE[Config::Get('sys.session.name')];
    } else {
        
/**
         * Иначе создаём новый и записываем его в куку
         */
        
$this->sId $this->GenerateId();
        
setcookie(
            
Config::Get('sys.session.name'),
            
$this->sIdtime() + Config::Get('sys.session.timeout'),
            
Config::Get('sys.session.path'),
            
Config::Get('sys.session.host')
        );
    }
}

Устанавливает уникальный идентификатор сессии

Start() method
protected void Start()
Source Code: /framework/classes/modules/session/Session.class.php#77 (show)
protected function Start()
{
    if (
$this->bUseStandartSession) {
        
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')
        );
        if (!
session_id()) {
            
/**
             * Попытка подменить идентификатор имени сессии через куку
             */
            
if (isset($_COOKIE[Config::Get('sys.session.name')]) and !is_string($_COOKIE[Config::Get('sys.session.name')])) {
                die(
"Hacking attemp! Please check cookie PHP session name.");
            }
            
/**
             * Попытка подменить идентификатор имени сессии в реквесте
             */
            
$aRequest array_merge($_GET$_POST); // Исключаем попадаение $_COOKIE в реквест
            
if (@ini_get('session.use_only_cookies') === "0" and isset($aRequest[Config::Get('sys.session.name')]) and !is_string($aRequest[Config::Get('sys.session.name')])) {
                die(
"Hacking attemp! Please check cookie PHP session name.");
            }
            
/**
             * Даем возможность флешу задавать id сессии
             */
            
$sUserAgent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
            if (
$sUserAgent and (in_array($sUserAgent$this->aFlashUserAgent) or strpos($sUserAgent,
                        
"Adobe Flash Player") === 0) and is_string(getRequest('SSID')) and preg_match("/^[\w\d]{5,40}$/",
                    
getRequest('SSID'))
            ) {
                
session_id(getRequest('SSID'));
            } else {
                
session_regenerate_id();
            }
            
session_start();
        }
    } else {
        
$this->SetId();
        
$this->ReadData();
    }
}

Старт сессии