Laravel кеш сессии на сервере (ошибка конфигурации) - PullRequest
1 голос
/ 08 февраля 2020

У меня была странная проблема с сессиями в Laravel, и я нигде не мог найти решение. Я наконец понял это и подумал, что поделюсь, надеясь, что это может кому-то помочь в будущем.


TLDR;

Проблема : конфигурация Engintron микрокэширование перемешивания идентификаторов сеансов

Решение : изменить имя сеанса cook ie name с laravel_session на userID


Full Story:

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

Конфигурация : Laravel 6.2, PHP 7.2 и Engintron NGINX для интеграции *1035* в cPanel / WHM

Причина : здесь происходило кэширование сессий, и последний пользователь использовал для входа кэшированную версию.

1 Ответ

0 голосов
/ 08 февраля 2020

Подробная причина :

Вот часть конфигурации по умолчанию динамических параметров прокси-серверов Engintron c.

# CMS (& CMS extension) specific cookies (e.g. Joomla, K2 for Joomla, WordPress, WooCommerce, PrestaShop etc.)
if ($http_cookie ~* "(joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+)") {
    set $CACHE_BYPASS_FOR_DYNAMIC 1;
    set $EXPIRES_FOR_DYNAMIC 0;
}

Что здесь происходит то, что Engintron будет микрокешировать любого повара ie, который не похож на:

joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+

Обратите внимание, что laravel_session там нигде нет. Поэтому Engintron будет микрокешировать любой laravel сеанс Cook ie, и в этих конфигурациях вы могли бы разрешить пользователю ошибочно входить в другую учетную запись.

Решение:

Существует два способы решить это. Вы можете настроить конфигурации на своем сервере или в своем приложении.

A) В пределах Laravel:

Изменить конфигурацию / сеанс. php строка 127 с:

'cookie' => env(
        'SESSION_COOKIE',
        Str::slug(env('APP_NAME', 'laravel'), '_').'_session'
    ),

до

'cookie' => 'userID',

B) На сервере:

Или просто добавьте laravel_session или как вы называете файлы cookie своего приложения в списке указанных c файлов cookie, например, так :

if ($http_cookie ~* "(laravel_session|joomla_[a-zA-Z0-9_]+|userID|wordpress_(?!test_)[a-zA-Z0-9_]+|wp-postpass|comment_author_[a-zA-Z0-9_]+|woocommerce_cart_hash|woocommerce_items_in_cart|wp_woocommerce_session_[a-zA-Z0-9]+|sid_customer_|sid_admin_|PrestaShop-[a-zA-Z0-9]+)") {
    set $CACHE_BYPASS_FOR_DYNAMIC 1;
    set $EXPIRES_FOR_DYNAMIC 0;
}

Надеюсь, это кому-нибудь поможет:)

Удачного кодирования!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...