Детальний огляд системи сесій (сеансів) в 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.
Дякуємо за увагу!