Spec-Zone.ru › Yii 1.1

CDbHttpSession

Пакет system.web
Наследование class CDbHttpSession » CHttpSession » CApplicationComponent » CComponent
Реализует Countable, ArrayAccess, Traversable, IteratorAggregate, IApplicationComponent
С версии 1.0
Исходный код framework/web/CDbHttpSession.php
CDbHttpSession расширяет CHttpSession, используя базу данных для хранения данных сессии.

CDbHttpSession хранит данные сессии в таблице базы данных с именем 'YiiSession'. Имя таблицы может быть изменено, установив свойство sessionTableName. Если таблицы не существует, она будет автоматически создана, если свойство autoCreateSessionTable установлено в значение true.

Вот структура таблицы:

CREATE TABLE YiiSession
(
    id CHAR(32) PRIMARY KEY,
    expire INTEGER,
    data BLOB
)
Где 'BLOB' относится к типу BLOB в вашей базе данных.

Обратите внимание, что если идентификаторы сессий содержат более 32 символов (может быть изменено с помощью session.hash_bits_per_character или session.hash_function), вам необходимо соответствующим образом изменить схему SQL.

CDbHttpSession использует PDO для доступа к базе данных.

По умолчанию он будет использовать базу данных SQLite3 с именем 'session-YiiVersion.db' в каталоге выполнения приложения. Вы также можете указать свойство connectionID, чтобы использовать компонент приложения базы данных для доступа к базе данных.

При использовании CDbHttpSession на сервере в производстве рекомендуется предварительно создать таблицу сессии базы данных и установить свойство autoCreateSessionTable в значение false. Это значительно улучшит производительность. Вы также можете создать индекс в базе данных для столбца 'expire' в таблице сессии для дальнейшего повышения производительности.

Общественные свойства

Свойство Тип Описание Определено
autoCreateSessionTable boolean указывает, должна ли таблица сессии базы данных автоматически создаваться, если она не существует. CDbHttpSession
autoStart boolean указывает, должна ли сессия автоматически запускаться при инициализации компонента приложения сессии, по умолчанию true. CHttpSession
behaviors array поведения, которые должны быть присоединены к этому компоненту. CApplicationComponent
connectionID string идентификатор компонента приложения CDbConnection. CDbHttpSession
cookieMode string способ использования cookie для хранения идентификатора сессии. CHttpSession
cookieParams array параметры cookie сессии. CHttpSession
count integer Возвращает количество элементов в сессии. CHttpSession
gCProbability float вероятность (в процентах), что процесс gc (уборки мусора) запускается при каждой инициализации сессии, по умолчанию 1 (1% вероятность). CHttpSession
isInitialized boolean Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
isStarted boolean указывает, была ли начата сессия. CHttpSession
iterator CHttpSessionIterator Возвращает итератор для обхода переменных сессии. CHttpSession
keys array список имен переменных сессии. CHttpSession
savePath string текущий путь сохранения сессии, по умолчанию {@link http://php. CHttpSession
sessionID string текущий идентификатор сессии. CHttpSession
sessionName string текущее имя сессии. CHttpSession
sessionTableName string имя таблицы базы данных для хранения содержимого сессии. CDbHttpSession
timeout integer количество секунд, по истечении которого данные будут считаться 'мусором' и удалены, по умолчанию 1440 секунд. CHttpSession
useCustomStorage boolean Возвращает значение, указывающее, использовать ли пользовательское хранилище сессии. CDbHttpSession
useTransparentSessionID boolean включена ли поддержка прозрачного идентификатора сессии, по умолчанию false. CHttpSession

Защищенные свойства

Свойство Тип Описание Определено
dbConnection CDbConnection экземпляр подключения к базе данных CDbHttpSession

Публичные методы

Метод Описание Определено в
__call() Вызывает метод с заданным именем, который не является методом класса. CComponent
__get() Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. CComponent
__isset() Проверяет, является ли значение свойства null. CComponent
__set() Устанавливает значение свойства компонента. CComponent
__unset() Устанавливает свойство компонента в null. CComponent
add() Добавляет переменную сессии. CHttpSession
asa() Возвращает объект поведения с заданным именем. CComponent
attachBehavior() Присоединяет поведение к данному компоненту. CComponent
attachBehaviors() Присоединяет список поведений к компоненту. CComponent
attachEventHandler() Присоединяет обработчик событий к событию. CComponent
canGetProperty() Определяет, можно ли считать свойство. CComponent
canSetProperty() Определяет, можно ли установить свойство. CComponent
clear() Удаляет все переменные сессии. CHttpSession
close() Завершает текущую сессию и сохраняет данные сессии. CHttpSession
closeSession() Обработчик закрытия сессии. CHttpSession
contains() CHttpSession
count() Возвращает количество элементов в сессии. CHttpSession
destroy() Освобождает все переменные сессии и уничтожает все данные, зарегистрированные в сессии. CHttpSession
destroySession() Обработчик уничтожения сессии. CDbHttpSession
detachBehavior() Отсоединяет поведение от компонента. CComponent
detachBehaviors() Отсоединяет все поведения от компонента. CComponent
detachEventHandler() Отсоединяет существующий обработчик событий. CComponent
disableBehavior() Отключает присоединенное поведение. CComponent
disableBehaviors() Отключает все поведения, присоединенные к этому компоненту. CComponent
enableBehavior() Включает присоединенное поведение. CComponent
enableBehaviors() Включает все поведения, присоединенные к этому компоненту. CComponent
evaluateExpression() Вычисляет PHP-выражение или обратный вызов в контексте данного компонента. CComponent
gcSession() Обработчик GC (сбор мусора) сессии. CDbHttpSession
get() Возвращает значение переменной сессии по имени переменной сессии. CHttpSession
getCookieMode() Возвращает способ использования cookie для хранения ID сессии. По умолчанию — 'Разрешить'. CHttpSession
getCookieParams() Возвращает параметры cookie сессии. CHttpSession
getCount() Возвращает количество элементов в сессии. CHttpSession
getEventHandlers() Возвращает список присоединенных обработчиков событий для события. CComponent
getGCProbability() Возвращает вероятность (в процентах) запуска процесса gc (сбора мусора) при каждой инициализации сессии, по умолчанию 1 (1% вероятность). CHttpSession
getIsInitialized() Проверяет, был ли инициализирован этот компонент приложения. CApplicationComponent
getIsStarted() Проверяет, началась ли сессия. CHttpSession
getIterator() Возвращает итератор для обхода переменных сессии. CHttpSession
getKeys() Возвращает список имен переменных сессии. CHttpSession
getSavePath() Возвращает текущий путь сохранения сессии, по умолчанию http://php.net/session.save_path. CHttpSession
getSessionID() Возвращает текущий ID сессии. CHttpSession
getSessionName() Возвращает текущее имя сессии. CHttpSession
getTimeout() Возвращает количество секунд, по истечении которых данные будут считаться «мусором» и удалены, по умолчанию 1440 секунд. CHttpSession
getUseCustomStorage() Возвращает значение, указывающее, следует ли использовать пользовательское хранилище сессии. CDbHttpSession
getUseTransparentSessionID() Возвращает, включена ли поддержка прозрачного SID, по умолчанию false. CHttpSession
hasEvent() Определяет, определено ли событие. CComponent
hasEventHandler() Проверяет, есть ли присоединенные обработчики для указанного события. CComponent
hasProperty() Определяет, определено ли свойство. CComponent
init() Инициализирует компонент приложения. CHttpSession
itemAt() Возвращает значение переменной сессии по имени переменной сессии. CHttpSession
offsetExists() Этот метод необходим для интерфейса ArrayAccess. CHttpSession
offsetGet() Этот метод необходим для интерфейса ArrayAccess. CHttpSession
offsetSet() Этот метод необходим для интерфейса ArrayAccess. CHttpSession
offsetUnset() Этот метод необходим для интерфейса ArrayAccess. CHttpSession
open() Инициализирует сеанс, если он ещё не начат. CHttpSession
openSession() Обработчик открытия сеанса. CDbHttpSession
raiseEvent() Вызывает событие. CComponent
readSession() Обработчик чтения сеанса. CDbHttpSession
regenerateID() Обновляет текущий идентификатор сеанса новым сгенерированным. CDbHttpSession
remove() Удаляет переменную сеанса. CHttpSession
setCookieMode() Устанавливает способ использования cookie для хранения ID сеанса. Допустимые значения: 'none', 'allow' и 'only'. CHttpSession
setCookieParams() Устанавливает параметры cookie сеанса. CHttpSession
setGCProbability() Устанавливает вероятность (в процентах), что процесс gc (уборки мусора) будет запущен при каждой инициализации сеанса. CHttpSession
setSavePath() Устанавливает текущий путь сохранения сеанса CHttpSession
setSessionID() Устанавливает идентификатор сеанса для текущего сеанса CHttpSession
setSessionName() Устанавливает имя сеанса для текущего сеанса, должно быть строкой из букв и цифр, по умолчанию PHPSESSID CHttpSession
setTimeout() Устанавливает количество секунд, после которого данные будут считаться 'мусором' и удалены. CHttpSession
setUseTransparentSessionID() Устанавливает, включена или выключена поддержка прозрачного sid. CHttpSession
toArray() CHttpSession
writeSession() Обработчик записи сеанса. CDbHttpSession

Защищенные методы

Метод Описание Определено в
createSessionTable() Создаёт таблицу базы данных для сеансов. CDbHttpSession
getDbConnection() Возвращает экземпляр подключения к базе данных. CDbHttpSession

Подробное описание свойств

autoCreateSessionTable свойство

public boolean $autoCreateSessionTable;

указывает, должна ли таблица базы данных сеансов автоматически создаваться, если её нет. По умолчанию true.

См. также

  • sessionTableName

connectionID свойство

public string $connectionID;

идентификатор компонента приложения CDbConnection. Если не задан, будет автоматически создана и использована база данных SQLite. Файл базы данных SQLite находится по адресу protected/runtime/session-YiiVersion.db.

dbConnection свойство только для чтения

protected CDbConnection getDbConnection()

экземпляр подключения к базе данных

sessionTableName свойство

public string $sessionTableName;

имя таблицы базы данных для хранения содержимого сеанса. Обратите внимание, если autoCreateSessionTable равно false, и вы хотите создать таблицу базы данных вручную, вам необходимо убедиться, что таблица базы данных имеет следующую структуру:

(id CHAR(32) PRIMARY KEY, expire INTEGER, data BLOB)

См. также

  • autoCreateSessionTable

useCustomStorage свойство только для чтения

public boolean getUseCustomStorage()

Возвращает значение, указывающее, использовать ли пользовательское хранилище сеанса. Этот метод переопределяет реализацию родительского класса и всегда возвращает true.

Подробное описание методов

createSessionTable() метод

protected void createSessionTable(CDbConnection $db, string $tableName)
$db CDbConnection подключение к базе данных
$tableName string имя таблицы, которая должна быть создана
Исходный код: framework/web/CDbHttpSession.php#139 (показать)
protected function createSessionTable($db,$tableName)
{
    switch(
$db->getDriverName())
    {
        case 
'mysql':
            
$blob='LONGBLOB';
            break;
        case 
'pgsql':
            
$blob='BYTEA';
            break;
        case 
'sqlsrv':
        case 
'mssql':
        case 
'dblib':
            
$blob='VARBINARY(MAX)';
            break;
        default:
            
$blob='BLOB';
            break;
    }
    
$db->createCommand()->createTable($tableName,array(
        
'id'=>'CHAR(32) PRIMARY KEY',
        
'expire'=>'integer',
        
'data'=>$blob,
    ));
}

Создаёт таблицу базы данных для сеансов.

destroySession() метод

public boolean destroySession(string $id)
$id string ID сеанса
{return} boolean успешно ли сеанс уничтожен
Исходный код: framework/web/CDbHttpSession.php#281 (показать)
public function destroySession($id)
{
    
$this->getDbConnection()->createCommand()
        ->
delete($this->sessionTableName,'id=:id',array(':id'=>$id));
    return 
true;
}

Обработчик уничтожения сеанса. Не вызывайте этот метод напрямую.

gcSession() метод

public boolean gcSession(integer $maxLifetime)
$maxLifetime integer количество секунд, после которого данные будут считаться 'мусором' и очищены.
{return} boolean успешно ли сеанс очищен от мусора
Исходный код: framework/web/CDbHttpSession.php#294 (показать)
public function gcSession($maxLifetime)
{
    
$this->getDbConnection()->createCommand()
        ->
delete($this->sessionTableName,'expire<:expire',array(':expire'=>time()));
    return 
true;
}

Обработчик gc (уборки мусора) сеанса. Не вызывайте этот метод напрямую.

getDbConnection() метод

protected CDbConnection getDbConnection()
{return} CDbConnection экземпляр подключения к базе данных
Исходный код: framework/web/CDbHttpSession.php#169 (показать)
protected function getDbConnection()
{
    if(
$this->_db!==null)
        return 
$this->_db;
    elseif((
$id=$this->connectionID)!==null)
    {
        if((
$this->_db=Yii::app()->getComponent($id)) instanceof CDbConnection)
            return 
$this->_db;
        else
            throw new 
CException(Yii::t('yii','CDbHttpSession.connectionID "{id}" is invalid. Please make sure it refers to the ID of a CDbConnection application component.',
                array(
'{id}'=>$id)));
    }
    else
    {
        
$dbFile=Yii::app()->getRuntimePath().DIRECTORY_SEPARATOR.'session-'.Yii::getVersion().'.db';
        return 
$this->_db=new CDbConnection('sqlite:'.$dbFile);
    }
}

getUseCustomStorage() метод

public boolean getUseCustomStorage()
{return} boolean использовать ли пользовательское хранилище.
Исходный код: framework/web/CDbHttpSession.php#83 (показать)
public function getUseCustomStorage()
{
    return 
true;
}

Возвращает значение, указывающее, использовать ли пользовательское хранилище сеанса. Этот метод переопределяет реализацию родительского класса и всегда возвращает true.

openSession() метод

public boolean openSession(string $savePath, string $sessionName)
$savePath string путь сохранения сеанса
$sessionName string имя сеанса
{return} boolean успешно ли сеанс открыт
Исходный код: framework/web/CDbHttpSession.php#195 (показать)
public function openSession($savePath,$sessionName)
{
    if(
$this->autoCreateSessionTable)
    {
        
$db=$this->getDbConnection();
        
$db->setActive(true);
        try
        {
            
$db->createCommand()->delete($this->sessionTableName,'expire<:expire',array(':expire'=>time()));
        }
        catch(
Exception $e)
        {
            
$this->createSessionTable($db,$this->sessionTableName);
        }
    }
    return 
true;
}

Обработчик открытия сеанса. Не вызывайте этот метод напрямую.

readSession() метод

public string readSession(string $id)
$id string ID сеанса
{return} string данные сеанса
Исходный код: framework/web/CDbHttpSession.php#219 (показать)
public function readSession($id)
{
    
$db=$this->getDbConnection();
    if(
$db->getDriverName()=='sqlsrv' || $db->getDriverName()=='mssql' || $db->getDriverName()=='dblib')
        
$select='CONVERT(VARCHAR(MAX), data)';
    else
        
$select='data';
    
$data=$db->createCommand()
        ->
select($select)
        ->
from($this->sessionTableName)
        ->
where('expire>:expire AND id=:id',array(':expire'=>time(),':id'=>$id))
        ->
queryScalar();
    return 
$data===false?'':$data;
}

Обработчик чтения сеанса. Не вызывайте этот метод напрямую.

regenerateID() метод (доступен с версии v1.1.8)

public void regenerateID(boolean $deleteOldSession=false)
$deleteOldSession boolean Удалить ли старый связанный файл сессии.
Исходный код: framework/web/CDbHttpSession.php#94 (показать)
public function regenerateID($deleteOldSession=false)
{
    
$oldID=session_id();

    
// if no session is started, there is nothing to regenerate
    
if(empty($oldID))
        return;

    
parent::regenerateID(false);
    
$newID=session_id();
    
$db=$this->getDbConnection();

    
$row=$db->createCommand()
        ->
select()
        ->
from($this->sessionTableName)
        ->
where('id=:id',array(':id'=>$oldID))
        ->
queryRow();
    if(
$row!==false)
    {
        if(
$deleteOldSession)
            
$db->createCommand()->update($this->sessionTableName,array(
                
'id'=>$newID
            
),'id=:oldID',array(':oldID'=>$oldID));
        else
        {
            
$row['id']=$newID;
            
$db->createCommand()->insert($this->sessionTableName, $row);
        }
    }
    else
    {
        
// shouldn't reach here normally
        
$db->createCommand()->insert($this->sessionTableName, array(
            
'id'=>$newID,
            
'expire'=>time()+$this->getTimeout(),
            
'data'=>'',
        ));
    }
}

Обновляет текущий идентификатор сессии новым сгенерированным. Подробнее см. http://php.net/session_regenerate_id.

writeSession() метод

public boolean writeSession(string $id, string $data)
$id string Идентификатор сессии
$data string Данные сессии
{return} boolean успешно ли выполнилось сохранение сессии
Исходный код: framework/web/CDbHttpSession.php#241 (показать)
public function writeSession($id,$data)
{
    
// exception must be caught in session write handler
    // http://us.php.net/manual/en/function.session-set-save-handler.php
    
try
    {
        
$expire=time()+$this->getTimeout();
        
$db=$this->getDbConnection();
        if(
$db->getDriverName()=='pgsql')
            
$data=new CDbExpression($db->quoteValueWithType($data, PDO::PARAM_LOB)."::bytea");
        if(
$db->getDriverName()=='sqlsrv' || $db->getDriverName()=='mssql' || $db->getDriverName()=='dblib')
            
$data=new CDbExpression('CONVERT(VARBINARY(MAX), '.$db->quoteValue($data).')');
        if(
$db->createCommand()->select('id')->from($this->sessionTableName)->where('id=:id',array(':id'=>$id))->queryScalar()===false)
            
$db->createCommand()->insert($this->sessionTableName,array(
                
'id'=>$id,
                
'data'=>$data,
                
'expire'=>$expire,
            ));
        else
            
$db->createCommand()->update($this->sessionTableName,array(
                
'data'=>$data,
                
'expire'=>$expire
            
),'id=:id',array(':id'=>$id));
    }
    catch(
Exception $e)
    {
        if(
YII_DEBUG)
            echo 
$e->getMessage();
        
// it is too late to log an error message here
        
return false;
    }
    return 
true;
}

Обработчик записи сессии. Не вызывать этот метод напрямую.

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CDbHttpSession

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API