Сессии позволяют сохранять пользовательские данные между запросами. Хранение сессий в HostCMS осуществляется в базе данных (по умолчанию) или в Redis (с версии HostCMS 6.8.3, используя php-redis версии 2.6.12+).
К данным сессии доступ получается через суперглобальный массив $_SESSION.
$value = $_SESSION['foo'];
Если вы не уверены в наличии требуемого значения в сессии, то используйте Core_Array::getSession(), при отсутствии значения метод вернет NULL
$value = Core_Array::getSession('foo');
То же действие, только с возвратом значения по умолчанию 'default' в случае, если индекса foo в сессии нет
$value = Core_Array::getSession('foo', 'default');
// Открыть сессию Core_Session::start(); // Записать в сессию $_SESSION['foo'] = 'bar'; // Закрыть сессию Core_Session::close();
Открывать сессию необходимо каждый раз перед там, как записать данные в $_SESSION, дополнительно проверять наличие открытой сессии перед вызовом Core_Session::start() не требуется, проверка содержится внутри метода start().
Проверить, запущена ли сессия:
$bStarted = Core_Session::isStarted();
Проверить, запущена ли сессия и активна:
$bActive = Core_Session::isActive();
Получить имя сессии:
$session_name = Core_Session::getName();
Запустить сессию только в случае, если она была ранее запущена в предыдущих сеансах:
if (Core_Session::hasSessionId()) { Core_Session::start(); print_r($_SESSION); }
При старте сессии, время жизни устанавливается равным времени, указанном в session.gc_maxlifetime, изменить время жизни сессии можно до или уже после запуска сессии методом Core_Session::setMaxLifeTime($maxlifetime, $overwrite = FALSE)
// Время жизни сессии в секундах (1 сутки с момента последней активности) Core_Session::setMaxLifeTime(86400);
Время жизни сессии будет установлено в том случае, если оно больше ранее заданного. Чтобы перезаписать время жизни сессии в любом случае, вторым параметром передайте TRUE.
Время жизни cookie с идентификатором сессии по умолчанию составляет 31536000 секунд, изменить его можно методом Core_Session::cookieLifetime($lifetime), вызванным до старта сессии. * с версии 6.9.7
// Время жизни куки в секундах Core_Session::cookieLifetime(1440);
Указание способа хранения сессий и опций осуществляется в основном конфигурационном файле modules/core/config/config.php
в опции session.
При хранении сессии в базе данных задаются 2 параметра:
driver
— название драйвера;class
— имя класса драйвера (необязательный параметр);subdomain
— устанавливать куку для поддоменов, по умолчанию TRUE. Если используете на поддоменах другой дистрибутив системы управления, установите в FALSE.'session' => array( 'driver' => 'database', 'class' => 'Core_Session_Database', 'subdomain' => FALSE, ),
Для хранения в Redis требуется больше параметров:
driver
— название драйвера;class
— имя класса драйвера (необязательный параметр);server
— адрес сервера, по умолчанию 127.0.0.1;port
— порт, по умолчанию 6379;auth
—авторизационный пароль, если сервер не требует пароль, то не устанавливайте опцию или укажите NULL;'session' => array( 'driver' => 'phpredis', 'class' => 'Core_Session_Phpredis', 'server' => '127.0.0.1', 'port' => 6379, 'auth' => 'авторизационный пароль' ),
А название метода isAcive() нарочно такое? Или же должно быть isActive() ?
Спасибо, опечатка была в коде, добавили в 6.9.2 метод isActive() и оставили обратную совместимость с isAcive(). Если у вас нет метода isActive(), обновленный файл можно взять в поддержке.
Подключил на BEGET услугу REDIS, внес изменения в конфигурационный файл, как у вас написано. После авторизации в админпанели постоянный запрос пароля, без возможности что-либо сделать. В чём может быть причина, не подскажете?