Детальный обзор системы сессий (сеансов) в Magento 2
Сегодняшняя статья посвящена подробному рассмотрению важного момента в Magento 2 – сессиям, и тому, как хранится информация о сеансе. Мы рассмотрим общие вопросы сессий, данные, которые хранятся в сеансе, настройки для сессий в админке, а также наиболее интересные моменты, которые возникают при работе с сессиями в Magento 2.
Сессии в Magento 2 – общая информация
Сессия (или сеанс) в Magento 2 позволяет хранить важную информацию, которую можно использовать для идентификации пользователя. Также сессии позволяют передавать нужные (и важные) данные с одной страницы на другую.
Magento хранит сессии в различных локациях:
- В памяти (RAM), если вы используете memcached
- На сервере Redis, если он настроен
- В файле
Когда вы используете файловую систему для хранения сеанса, Magento сохраняет сессию в файлах по указанному пути. Путь может быть указан в файле app/etc/env.php
:
'session' => array ( 'save' => 'files', 'save_path' => '/var/session', )
Если в этом файле путь не указан, тогда система будет искать настройки пути в файле php.ini
, в значении session.save_path
.
Если путь не указан ни в одном из вышеуказанных файлов, сеанс будет сохранен по следующему адресу /var/session
(из корневой папки установки Мадженто).
Для управления сессиями Magento использует класс \Magento\Framework\Session\SessionManager
. Magento также сохраняет идентификатор текущей сессии в файлах cookie, что помогает системе идентифицировать вас как пользователя, вошедшего в систему, даже после закрытия и открытия браузера.
При старте сеанса автоматически создаются файлы cookie с именем PHPSESSID
и значением, которое равно идентификатору сеанса. Для безопасности система вызывает функцию session_regenerate_id()
, когда вы входите в систему.
Новые данные автоматически заносятся в файлы cookie, а если у файлов cookie истек срок действия или максимальный возраст, тогда они обновляются.
Настройки файлов cookie и сеансов указываются в Панели администратора по адресу Магазины -> Конфигурация -> Интернет -> Настройки файлов cookie по умолчанию/Настройки проверки сеанса (Stores -> Configuration -> Web -> Default Cookie Settings / Session Validation Settings).
Здесь представлены настройки для следующих функций:
- Срок действия куки (Cookie Lifetime) – количество секунд, в течение которых информация о вашем присутствии на сайте будет сохраняться (даже при обновлении или смене страницы). По умолчанию время жизни для куки установлено на 3600 (т.е., 1 час).
- Путь куки (Cookie Path) – путь, который указывает на место хранения файлов cookie.
- Домен (Domain) – если не указать, тогда по умолчанию используется домен магазина.
- Использовать только HTTP (Use HTTP Only) – позволяет использовать только протокол HTTP, оставьте значение «Да», чтобы обезопасить себя.
- Режим уведомления о файлах cookie (Cookie Restriction Mode) – включает предварительное уведомление об использовании файлов cookie на фронтэнде магазина, требует от клиента согласия с Политикой конфиденциальности.
- Настройки проверки сеанса (Session Validation Settings) – в этом разделе настроек устанавливаются права доступа, а также указываются переменные, которые система должна проверять на сервере.
- Использовать SID на фронтэнде (Use SID on Storefront) – эта опция позволяет системе распознавать нас при переходе из одного магазина в системе к другому.
Какие данные записываются в сессию (сеанс) Magento 2
Сессия хранит в себе всю необходимую и постоянно используемую информацию о пользователе, в частности:
- Общая информация о пользователе, его браузере и IP-адресе
- Информация о посетителе, дата посещения, идентификатор сеанса, идентификатор посетителя, информация о том, вошел ли пользователь в систему или нет, идентификатор зарегистрированного пользователя
- Информация о зарегистрированном пользователе, его список пожеланий, данные его корзины, а также группа пользователей, к которой он относится
- Сообщения для пользователя, отчеты и другая информация
Мы можем указать для новых данных, чтобы они сохранялись в сеансе. Для этого вам нужно вызвать одну из моделей:
\Magento\Customer\Model\Session $customerSession \Magento\Catalog\Model\Session $catalogSession \Magento\Checkout\Model\Session $checkoutSession
и реализовать методы get
(получение), set
(установка), uns
(удаление значений из сеанса).
Важные моменты при работе с сессиями в Мадженто 2
Вы можете использовать различные модели для управления сессиями в различных ситуациях. Если вам нужно работать с пользовательскими данными, тогда лучше всего использовать модель \Magento\Customer\Model\Session
.
Если вам нужно указать время жизни сессии на стороне сервера, вам нужно в файле php.ini
установить желаемое значение в секундах для переменной session.gc_maxlifetime
. После этого не забудьте перезапустить сервер, чтобы изменения вступили в силу.
Для сохранения сеансов в Redis, укажите системе следующие настройки в файле app/etc/env.php
:
'session' => array ('save' => 'redis')
Чтобы узнать текущий идентификатор клиента, вошедшего в систему, вам необходимо объявить модель \Magento\Customer\Model\Session
в __construct
блоке или контроллере (в зависимости от ситуации). Затем запросить идентификатор пользователя, например так:
$this->session->getCustomerId();
Заключительные мысли
В сегодняшней статье мы подробно рассмотрели сессии в Magento 2, узнали, как и где хранится информация о сеансе пользователя. Сделали обзор настроек для сессий в Панели администратора, а также коснулись некоторых важных моментов, которые возникают при работе с сессиями в Magento 2.
Спасибо за внимание!