Тайм-аут серверной сессии 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

Магазины> Настройки> Конфигурация> Дополнительно> Администратор> Безопасность> Время жизни сеанса администратора (в секундах)

Также есть возможность установить этот параметр непосредственно в базу данных, просто поместите значение в путь

админ / безопасность / session_lifetime

в таблице 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)или когда браузер закрыт.

Или вы можете установить новое значение для куки администратора, как это предлагается в ответе fschmengler

Аркадий Чижов
источник
Вас заинтересовало бы изменение функциональности многоуровневой навигации на нашем веб-сайте M2?
Эльс ден Ип,
@ElsdenIep pls. найди мою контактную информацию в профиле
Аркадий Чижов
Вы знаете, что является столбцом в базе данных для этого значения, чтобы я мог изменить его программно?
Jojman
Я установил 50400, но он все еще выходит из системы примерно через 20 минут ....
Оззи
@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, внедренный через параметр конструктора.

Таким образом, время жизни куки используется из конфигурации, как и во внешнем интерфейсе.

Обратите внимание, что конфигурация в Stores> Configuration> Advanced> Admin Security> Session Lifetime больше не влияет на файлы cookie! Он используется для определения времени жизни сеанса Redis, поэтому, если вы увеличите время жизни куки, вам также следует увеличить это значение.

Фабиан Шменглер
источник
Мне интересно, если вы могли бы объяснить эту причину безопасности. С моей точки зрения, установка времени жизни cookie администратора на 0 приводит к расхождению и неочевидному поведению, если мы используем 'admin / security / session_lifetime', который определяет время жизни сеанса администратора и который неявно зависит от 2.1 от времени жизни cookie.
Аркадий Чижов
1
Я предполагал, что это предотвратит случай, когда администратор закроет окно без «выхода из системы», и любой человек, получающий доступ к тому же компьютеру, уже вошел в систему. Это не является серьезной угрозой, и я согласен с вами, что это плохое решение сделать эту «особенность» неочевидной.
Фабиан Шменглер
Но я искал ответственный коммит сейчас и обнаружил: github.com/magento/magento2/commit/… "MAGETWO-49092: Неверный ключ формы на странице входа администратора" - это больше похоже на обходной путь, чтобы скрыть еще одну ошибку с более или менее случайный и по крайней мере недокументированный побочный эффект.
Фабиан Шменглер
Должно быть что-то еще, потому что мой сеанс истекает без закрытия браузера.
Мэтт Косентино
1
@Volvox смотри внимательно: плагин для setCookieLifetimeпубличного метода с параметрами
Фабиан Шменглер
6

Обратите внимание, что принятый ответ работает, однако magento 2 использует папку php по умолчанию для хранения файлов сеанса, если это настроено в php:

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

затем это добавляется в системный cron установкой php.

Так что вы можете либо

  • отключить этот хрон
  • или лучше: увеличение gc_maxlifetimeв php.ini (так как это будет верхний предел)
Ozzie
источник
2

Другим решением без изменения каких-либо настроек является установка любого auto refresh addonдля вашего браузера и установка его времени (60 секунд).

Он будет автоматически обновлять страницу каждые 6 секунд, что предотвращает истечение срока жизни сессии, и мы можем начать работать с другой вкладкой.

Я использовал, Easy Auto Refreshи это прекрасно работает для меня.

Амит Сингх
источник
не будь глупым с такими "решениями". это абсолютно неприемлемо.
Sellio
2

Если вы используете несколько виртуальных машин / серверов для сети и базы данных, а время не синхронизировано, это также вызвало проблему.

Поэтому, если все вышеперечисленные параметры не работают, проверьте отметку времени / дату двух серверов, когда вы используете несколько серверов для Интернета и БД.

Ауник Рахман
источник
1

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

  1. В php.ini измените session.gc_maxlifetime с 1440 на любое количество секунд, которое вы пожелаете. (Это решение работало для меня, проверено на magento 2.2.0 и 2.2.1)

  2. В .htaccess добавьте «php_value session.gc_maxlifetime 28800» или любое другое количество секунд.

  3. Путем ручной настройки времени жизни. Перейдите в vendor / magento / module-encryption-key / etc / config.xml и измените значение с 900 на любое количество секунд, которое вы пожелаете.

Надеюсь, что одно из этих решений будет работать и для других.

Sylaratty
источник