Сессионный кеш (Local Session)
Тему урока можно изучить в новом формате — в документации по Bitrix Framework. В ней улучшена структура, описание, примеры.
Иногда возникает задача кешировать данные, которые связаны с текущим пользователем. Конечно, один из вариантов, это использовать сессию, но это не всегда подходит, так как:
- сессия не создана для кеширования,
- большое количество данных сказывается на скорость работы с сессией,
- возникают блокировки хитов.
Один из альтернативных вариантов, это создать кеш, который привязан к session_id(). По сути, это простая имитация сессии. С версии main 20.5.400 есть новая возможность.
Пример:
$localStorage = \Bitrix\Main\Application::getInstance()->getLocalSession('someCategory');
if (!isset($localStorage['productIds']))
{
$localStorage->set('productIds', [1, 2, 100]);
$localStorage->set('price', 42);
}
var_dump($localStorage->get('productIds'));
Принцип работы
Принцип работы достаточно прост: при вызове \Bitrix\Main\Application::getLocalSession($name) всегда возвращается экземпляр \Bitrix\Main\Data\LocalStorage\SessionLocalStorage. Это элемент кеша, который автоматически опирается на session_id().
При этом, если это первое обращение и данных нет, то будет создан пустой контейнер, если же в кеше были данные по $name, то контейнер будет наполнен данными.
Все SessionLocalStorage сохраняются в конце хита ядром автоматически.
Внимание! SessionLocalStorage работает на кеше, который описан в настройках .settings.php.
Примечание: Если кеш файловый, то SessionLocalStorage будет использовать для хранения $_SESSION, так как иначе возникает проблема контроля и удаления устаревших файлов, что может повлиять на работу файловой системы.
| Документация по теме: |
- Документация D7: SessionLocalStorage