323  /  331

Работа с сессиями

Просмотров: 4904 (Статистика ведётся с 06.02.2017)
Дата последнего изменения: 16.12.2016

Продукт допускает работу с сессиями следующим образом:

Хранение сессий в memcached

Для включения хранения сессий в 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);

После этого, включить в модуле проактивной защиты, хранение сессий в базе данных. В результате получаем хранение сессий в memcached средствами ядра.

Данный способ хранения сессий дает следующие преимущества:

  • нет необходимости следить за количеством старых сессий на нагруженном проекте;
  • возможность разделять сессии между серверами в кластере;
  • возможность использовать не ожидающую получения блокировки сессию;
  • возможность использовать виртуальные сессии.

Хранение сессий в БД имеет те же преимущества что и хранение сессий в memcached, но оно значительно более медленное. Поэтому рекомендуем для этой цели использовать memcached взамен БД.

Неблокирующие сессии

Одной из проблем больших проектов с множественными Ajax запросами, является частые блокировки хитов одного пользователя на ожидание получения блокировки сессии. Особенно это актуально для "Битрикс24 в коробке", где во многих местах прикрепленные к сущностям файлы отдаются пользователю, после проверки прав на PHP. Поэтому на страницах возможно построение "лесенки", из-за ожидания получения блокировки сессии. Включить не блокирующую сессию можно установкой константы, до подключения ядра продукта:

define('BX_SECURITY_SESSION_READONLY', true);

После этого сессия читается из memcached или БД не ожидая получения блокировки. Внутри продукта данная функциональность используется например при отдаче файлов.

Важно помнить, что при использование данной константы по завершению хита, сессия не будет записана. Это может привести к потере данных сохраненных в рамках хита в сессии.

Виртуальные сессии

Неблокирующих сессий достаточно для большинства случаев. Но в некоторых ситуациях, когда сессия нам не нужна совсем, использование неблокирующей сессии - избыточно, так как сессия будет создаваться в случае ее отсутствия. В результате при большом количестве не связанных между собой хитов, будет создано большое количество "мусорных" сессий. Примером таких хитов, являются хиты REST'а.

Для решения этой проблемы была добавлена Виртуальная сессия. Её суть в том, что сессия создается в памяти, не ждет блокировок и не сохраняется. Для ее включения необходимо установить константу, до подключения ядра продукта.

define('BX_SECURITY_SESSION_VIRTUAL', true);

Особо стоит обратить внимание на то, что данный тип сессии никак не сохраняется. В продукте используется при обработке rest запросов.



Примечание: Если у вас "Битрикс24 в коробке", проект с большим количеством ajax запросов или много файлов отдается с проверкой прав (например в блогах, соцсети, форуме), то лучше использовать хранение сессий в memcached средствами ядра.


3
Курсы разработаны в компании «1С-Битрикс»

Если вы нашли неточность в тексте, непонятное объяснение, пожалуйста, сообщите нам об этом в комментариях.
Развернуть комментарии