Symfony3 теряет сеанс пользователя сразу при входе

Я переместил свое приложение Symfony3 с общего хостинга на новый VPS, который я только что настроил. Когда я пытаюсь войти в приложение (используя обычную форму FOSUserBundle), Symfony регистрирует меня только для того, чтобы отключить меня при перезагрузке следующей страницы. Это «мгновенно», потому что первое, что делает успешный вход в систему, — это перенаправление на страницу.

Что я пробовал:

  • Я отключил перенаправление, которое позволяет мне видеть, что я подключен на странице ‘login_check’. Я знаю это, так как панель инструментов Symfony Debug показывает мое имя. Только не после перенаправления.
  • Я вижу, что в моих файлах cookie в любое время нет PHPSESSID. Я думаю, что это cookie, который отвечает за поддержание моей сессии Symfony. Так…
  • Я пробовал разные php-скрипты, чтобы проверить мою конфигурацию VPS. Он хорошо обрабатывает куки и PHP сессии.
  • Я даже установил WordPress в подпапке, он отлично обрабатывает мои сессии и куки.
  • Папка сервера, используемая Symfony для хранения сессий, используется WordPress. И файлы сессий появляются при попытке входа в Symfony. (хотя иногда они просто пустые файлы …!?)
  • Обновление FOSUB и Symfony до последних версий. Без изменений.

Я использую Symfony 3.4.6 и FOSUB 2.0.0. Любая идея?

ОБНОВЛЕНИЕ: Security.yml

# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
fos_userbundle:
id: fos_user.user_provider.username_email

firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
check_path:     fos_user_security_check
failure_path:   fos_user_security_login
login_path: /fr/public/login
default_target_path: app_homepage
logout:
path: fos_user_security_logout
target: fos_user_security_login
anonymous:    true


access_control:
# Allow anonymous logging for these page:
- { path: ^/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/fr/$, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/fr/public/*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/fr/lab, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/fr/help, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/cron, role: IS_AUTHENTICATED_ANONYMOUSLY }
# Techs pages
- { path: ^/_console, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_wdt, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_profiler, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/_error, role: IS_AUTHENTICATED_ANONYMOUSLY }
# Staff only
- { path: ^/fr/staff/, role: ROLE_STAFF }
- { path: ^/fr/staff/*, role: ROLE_STAFF }
# Admin only
- { path: ^/fr/admin/, role: ROLE_ADMIN }
- { path: ^/fr/admin/*, role: ROLE_ADMIN }
# All other pages need to be logged
- { path: ^/*, role: [IS_AUTHENTICATED_FULLY,IS_AUTHENTICATED_REMEMBERED] }

0

Решение

Таким образом, проблема заключается как в куки, так и в SSL. При установке моего приложения на моем новом сервере для переноса моего SSL-сертификата потребовалось некоторое время, поэтому URL моего сайта был HTTP, а не HTTPS.

Однако браузер продолжал использовать файл cookie сеанса пользователя Symfony с именем PHPSESSID, который был добавлен с протоколом HTTPS. По неизвестной причине наличие этого устаревшего файла cookie препятствовало ведению журнала без возврата каких-либо ошибок.

Кроме того, я использовал плагин EditThisCookie Firefox, который не показывал наличие файла cookie PHPSESSID. Хотя браузер все же учел это.

Итак, для тех, кто испытывает ту же (очень специфическую) проблему: найдите и удалите cookie-файл PHPSESSID, который может быть трудно найти, потому что он не совсем по тому же протоколу. В Firefox: Веб-отладчик> Хранение> Файлы cookie.

1

Другие решения

Вы пытались изменить:

- { path: ^/fr/public/*, role: IS_AUTHENTICATED_ANONYMOUSLY }

в

- { path: ^/fr/public, role: IS_AUTHENTICATED_ANONYMOUSLY }
0

У меня была похожая проблема, но это оказалось session.cookie_secure = true (php.ini), и тестовый сайт был HTTP (не HTTPS)

; http://php.net/session.cookie-secure
session.cookie_secure = false

0
По вопросам рекламы [email protected]