Час очікування сеансу Magento 2


53

У Magento 1.x час встановлення тайм-аут сеансу було встановлено через:
Backend -> System -> Configuration -> Admin -> Security -> Session Lifetime (seconds)

Спочатку моє питання полягав у тому, як встановити це в Magento 2.0, але, очевидно, є відмінності між Magento 2.0 та Magento 2.1

Для Magento 2.0: Аркадій Чижов вказав, як це встановити (див. Нижче).

Для Magento 2.1: fschmengler запропонував рішення (див. Нижче).

Однак, M 2.1, здається, не забезпечує прямого рішення через бекенд. Хтось може придумати додаткове рішення для M 2.1?

Відповіді:


82

Магазини> Налаштування> Конфігурація> Додатково> Адміністратор> Захист> Термін служби сеансу адміністратора (секунди)

Також є можливість встановити цей параметр безпосередньо в базу даних, просто поставити значення під шлях

адміністратор / безпека / сесія_вжиття

у таблиці core_config_data

Оновлення

Час життя файлів cookie Magento 2.1 = Магазини> Налаштування> Конфігурація> Додатково> Адміністратор> Захист> Час роботи сеансу адміністратора (секунди) або поки користувач не закриє веб-переглядач

Оскільки Magento 2.1 вводить термін експлуатації файлів cookie адміністратора як "закінчується при закритті браузера" разом із значенням в Stores >Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds). Це означає, що час життя сеансу дорівнює значенню в Stores > Settings > Configuration > Advanced > Admin > Security > Admin Session Lifetime (seconds)браузері або коли він закритий.

Або ви можете встановити нове значення для cookie адміністратора, як це запропоновано у відповіді fschmengler


Вас зацікавило б коригування функціоналу багатошарової навігації на нашому веб-сайті M2?
Els den Iep

@ElsdenIep pls. знайдіть мою контактну інформацію в профілі
Аркадій Чижов

Чи знаєте ви, що таке стовпець у базі даних для цього значення, тож я можу це змінити програмно?
їїман

Я встановив, що це 50400, але він все ще виходить із системи приблизно через 20 хвилин ....
OZZIE

@ArkadiiChyzhov дивіться мою відповідь нижче :)
OZZIE

16

Перевірте скріншот прикріпленого зображення для кращого розуміння адміністраторського процесу.

Перейдіть у Магазини-> Налаштування-> Конфігурація-> Додатково-> Адміністратор-> Безпека-> Життя адміністративного сеансу (секунди)

І перевірте скріншот. введіть тут опис зображення


10

Рішення для Magento 2.1+

Оскільки Magento 2.1 тривалість роботи сеансу адміністрування завжди є "сеансом", тобто до закриття браузера. Цебув можливо, було введено з міркувань безпеки.

Відповідний код знаходиться у Magento\Backend\Model\Session\AdminConfig:

/**
 * Set session cookie lifetime to session duration
 *
 * @return $this
 */
protected function configureCookieLifetime()
{
    return $this->setCookieLifetime(0);
}

Якщо ви хочете змінити цю поведінку, ви можете додати плагін для цього класу за допомогою наступного методу перехоплення:

public function beforeSetCookieLifetime()
{
    $lifetime = $this->scopeConfig->getValue(
        \Magento\Framework\Session\Config::XML_PATH_COOKIE_LIFETIME,
        \Magento\Framework\App\Config\ScopeConfigInterface::SCOPE_TYPE_DEFAULT);
    return [$lifetime, \Magento\Framework\Session\Config::COOKIE_LIFETIME_DEFAULT];
}

Де $this->scopeConfigповинен бути екземпляр \Magento\Framework\App\Config\ScopeConfigInterface, введений через параметр конструктора.

Таким чином, термін використання файлів cookie використовується з конфігурації, як і на фронталі.

Зверніть увагу, що конфігурація в магазинах> Конфігурація> Додатково> Безпека адміністратора> Життя сесії вже не впливає на файли cookie! Він використовується для визначення терміну служби сеансу Redis, тому якщо ви збільшите термін використання файлу cookie, ви також повинні збільшити це значення.


Мені цікаво, чи можете ви пояснити цю причину безпеки. З моєї точки зору, встановлення часу cookie адміністратора на 0 приводить до невідповідності та не очевидної поведінки, якщо ми використовуємо 'admin / security / session_lifetime', який визначає час життя сеансу адміністрування, і який безпосередньо залежить від часу 2.1.
Аркадій Чижов

1
Я припускав, що це запобігає випадку, коли адміністратор закриє вікно без "виходу з системи", і будь-яка людина, що отримує доступ до того ж ПК, вже входить у систему. Це не є основною загрозою, і я погоджуюся з вами, що це неправильне рішення щоб зробити цю "особливість" не очевидною.
Фабіан Шменглер

Але я шукав відповідальну комісію зараз і виявив це: github.com/magento/magento2/commit/… "MAGETWO-49092: Недійсний ключ форми на сторінці входу адміністратора" - це більше схоже на вирішення проблеми, щоб приховати ще одну помилку з більш або менш випадковий і принаймні незадокументований побічний ефект.
Фабіан Шменглер

Потрібно більше, тому що мій сеанс продовжує закінчуватися, не закриваючи браузер.
Метт Косентіно

1
@Volvox уважно дивіться: плагін для setCookieLifetime, публічний метод з параметрами
Fabian Schmengler

6

Примітка тут: прийнята відповідь працює, однак magento 2 використовує папку php за замовчуванням для зберігання файлів сесії, якщо у вас це налаштовано в php:

09,39 *     * * *     root   [ -x /usr/lib/php/sessionclean ] && /usr/lib/php/sessionclean

то це додається в системний крон установкою php.

Тож ви можете будь-яке

  • відключити цей крон
  • або краще: збільшення gc_maxlifetimephp.ini (оскільки це буде верхня межа)

2

Іншим рішенням без зміни будь-яких параметрів є встановлення будь-якого auto refresh addonдля вашого браузера та встановлення його часу (60 секунд).

Він автоматично оновлює сторінку кожні 6о секунд, що запобігає закінченню терміну роботи сеансу, і ми можемо почати працювати на іншій вкладці.

Я використав, Easy Auto Refreshі це прекрасно працює для мене.


не будь дурним з такими "рішеннями". його абсолютно неприйнятно.
sellio

2

Якщо ви використовуєте декілька VM / серверів для веб і db, і час не синхронізується, це також спричинило проблему.

Отже, якщо всі параметри вище не працюють, перевірте позначку часу / дату двох серверів, коли ви використовуєте декілька серверів для веб і db.


1

Я не знаю, чому, але для деяких із нас налаштування періоду роботи сеансу адміністратора з бекенда не працює, тому я знайшов пару рішень:

  1. У php.ini змінити session.gc_maxlifetime з 1440 на будь-яку кількість секунд, на яку ти хочеш. (Це рішення працювало для мене, тестувалося на magento 2.2.0 та 2.2.1)

  2. У .htaccess додайте "php_value session.gc_maxlifetime 28800" або скільки завгодно секунд.

  3. Вручну встановивши термін експлуатації. Перейдіть до постачальника / magento / key-encryption-key / etc / config.xml та перейдіть з 900s на скільки завгодно секунд.

Сподіваємось, що одне з цих рішень буде працювати і для інших.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.