Подтвердить что ты не робот

Сессия Laravel всегда изменяет каждое обновление/запрос в Laravel 5.4

Итак, название в основном говорит обо всем, я использую Laravel 5.4, PHP 7.1, а на моих локальных машинных сеансах работают нормально. По сути, при попытке войти или перезагрузить страницу каждый раз, когда я получаю новый токен CSRF, который разбивает все. Я использую базу данных в качестве моего драйвера сеанса, и он создает новую запись в БД каждый отдельный запрос. Это произошло на моей локальной машине, когда я впервые обновился, но чтобы исправить это, было необходимо обновить переменную envie_domain env, и я получил ее работу. Однако на моем новом сервере я пробовал каждый домен, о котором я мог думать, и он все еще не работает.

Вот что я знаю,

  • cookie сеанса не сохраняется в Chrome → Application → Cookies, это действительно отображается в моей локальной настройке.

  • CSRF-TOKEN получает новое значение для перезагрузки каждой страницы, но файл cookie XSRF-TOKEN присутствует и сохраняет свое значение при каждой перезагрузке.

  • Как локальный, так и мой новый сервер работают с той же ветвью git, и оба работают под управлением apache 2.4, Laravel 5.4 и PHP 7.1, поэтому это заставляет меня предположить, что это проблема конфигурации. На локальном и сервере работают centos 7

  • Каждый запрос создает новый сеанс в БД, это происходит для запросов get, post и ajax.

Я предполагаю, что это проблема с конфигурацией где-то, но я понятия не имею, любая помощь была бы весьма признательна. Если это помогает, поиск под моим ответом Заголовки для начальной загрузки страницы как sid, так и сеанс laravel присутствуют в команде Set-Cookie, но фактически не сохраняются в хранилище cookie локального приложения.

Изменить/Обновить Поэтому изначально я ответил на свой вопрос, сказав, что я решил исправить, но это исправление больше не работает, и я получаю эту проблему повсюду. Поэтому для обновления моей проблемы все так же, как и раньше, попытка сделать что-либо создает новый сеанс, перезагрузка и перемещение нескольких страниц добавляет десятки сеансов из-за аякс-запросов и других подобных действий.

Моя настройка теперь такова, у меня есть 3 сервера, у всех трое работает клонированное изображение, что означает, что они идентичны, однако один из них является субдоменом, development.mysite.com, а второй 2 - балансировкой нагрузки для основной сайт mysite.com. Поэтому единственное возможное объяснение, которое я могу придумать, заключается в том, что каким-то образом laravel не может понять мою настройку из-за моего субдомена. Я пробовал все возможные комбинации COOKIE_DOMAIN в .ENV файле (development.mysite.com,.mysite.com, mysite.com,.development.mysite.com и т.д.), И я добавил несколько десятков вариантов для моего хоста. помогло. Какие-нибудь идеи относительно того, что это может быть?

** Изменить/Обновить # 2 ** В дополнение к этому я обнаружил, что это может быть связано с тем, что мой домен в использовании является субдоменом, в котором основной домен также работает с laravel, поэтому мне придется выяснить, как и почему.

4b9b3361

Ответ 1

Я нашел решение для этого было 2 части, не знаю, почему это изменилось, так как это была одна и та же ОС и настройка.

Шаг 1 убедитесь, что COOKIE_DOMAIN установлен правильно и без номеров портов (Либо в .env, либо /config/sessions.php, в зависимости от того, что вы используете)

Шаг 2 убедитесь, что имя файла cookie ('cookie' = > 'whatever') внутри /config/sessions.php не имеет в нем подчеркивания. По-видимому, у Ларавеля были проблемы с этим.

Ответ 2

Мы тоже выбросили эту ошибку, и это, как представляется, устраняет проблему:

• Проверьте правильность правильной папки storage/

• Попробуйте отключить весь Javascript на своих страницах (отключив его через навигатор или внутри кода) и убедитесь, что 'http_only' => true,

• Попробуйте использовать с и без https

• Убедитесь, что переменная SESSION_DRIVER не равна null

• Попробуйте переключиться между 'encrypt' => false, и 'encrypt' => true,

• Попробуйте изменить имя файла cookie 'cookie' => 'laravelsession',

• Попробуйте либо установить SESSION_DOMAIN в ваш фактический домен ИЛИ null

• Попробуйте переключиться между 'secure' = > env ('SESSION_SECURE_COOKIE', false) и 'secure' = > env ('SESSION_SECURE_COOKIE', true),

После каждого шага эта ошибка кажется фиксированной, но каким-то образом cookie по-прежнему не устанавливается в навигаторе, пока мы не будем использовать https для разработки.

Я сожалею, что не могу обеспечить 100% -ное исправление, но имея ТОЧНУЮ ту же проблему, я хотел поделиться своим опытом с вами.

Ответ 3

Основной причиной этой проблемы является неспособность сохранять данные сеанса на стороне сервера.

С файлом в качестве хранилища сеансов он может быть и обычно является проблемой с разрешениями, [Проверить SELINUX, если вы находитесь в centos], laravel (это означает, что apache или nginx или любой пользователь, с которым выполняется ваш процесс) должны иметь право на чтение и запись в папке, где хранятся файлы сеанса [Это обычно папка с корневым/хранилище проекта].

Другая причина, по которой это может произойти, заключается в том, что вы используете базу данных как хранилище сеансов и создали таблицу сеансов вручную и допустили ошибку при создании столбца id типа bigint (20) или любого другого несоответствующего столбца.

Это снова означает, что laravel не смог сохранить данные сеанса. Проверьте мой подробный ответ об этом здесь fooobar.com/info/458329/...

И последнее указывает на настройку cookie и домена, как указано выше. Надеюсь, что это поможет определить проблему для любого, кто борется с проблемой в будущем.