Дата последнего изменения: 05.07.2022
Продукт допускает работу с сессиями следующим образом:
Для включения хранения сессий в memcached в старом ядре необходимо в файле /bitrix/php_interface/dbconn.php
установить следующие константы:
define('BX_SECURITY_SESSION_MEMCACHE_HOST', 'localhost'); define('BX_SECURITY_SESSION_MEMCACHE_PORT', 11211);
Либо, в случае использования unix-socket:
define('BX_SECURITY_SESSION_MEMCACHE_HOST', 'unix:///path/to/memcached.sock'); define('BX_SECURITY_SESSION_MEMCACHE_PORT', 0);
После этого, включить в файле
bitrix/.settings.php
Ядро поддерживает четыре варианта для хранения (файлы, redis, database, memcache) данных сессии. Способ хранения описывается в bitrix/.settings.php в секции 'session'.
Подробнее ...
хранение сессий в базе данных средствами ядра.
Данный способ хранения сессий дает следующие преимущества:
Хранение сессий в БД имеет те же преимущества что и хранение сессий в memcached, но оно значительно более медленное. Поэтому рекомендуем для этой цели использовать memcached взамен БД.
Одной из проблем больших проектов с множественными Ajax запросами, является частые блокировки хитов одного пользователя на ожидание получения блокировки сессии. Особенно это актуально для "Битрикс24 в коробке", где во многих местах прикрепленные к сущностям файлы отдаются пользователю, после проверки прав на PHP. Поэтому на страницах возможно построение "лесенки", из-за ожидания получения блокировки сессии. Включить не блокирующую сессию можно установкой константы, до подключения ядра продукта:
define('BX_SECURITY_SESSION_READONLY', true);
После этого сессия читается из memcached или БД не ожидая получения блокировки. Внутри продукта данная функциональность используется например при отдаче файлов.
Неблокирующих сессий достаточно для большинства случаев. Но в некоторых ситуациях, когда сессия нам не нужна совсем, использование неблокирующей сессии - избыточно, так как сессия будет создаваться в случае ее отсутствия. В результате при большом количестве не связанных между собой хитов, будет создано большое количество "мусорных" сессий. Примером таких хитов, являются хиты REST'а.
Для решения этой проблемы была добавлена Виртуальная сессия. Её суть в том, что сессия создается в памяти, не ждет блокировок и не сохраняется. Для ее включения необходимо установить константу, до подключения ядра продукта.
define('BX_SECURITY_SESSION_VIRTUAL', true);
Особо стоит обратить внимание на то, что данный тип сессии никак не сохраняется. В продукте используется при обработке rest запросов.