Symfony 4 некоторые пользователи не могут войти в систему, токен csrf недействителен, возможна проблема с сеансом php, ошибка не выдается - PullRequest
0 голосов
/ 19 октября 2018

Я недавно обновился с Symfony 3.4 до 4.2.При обновлении сервера было несколько проблем.Сначала сеанс сохранялся в файле на сервере, но затем я изменил его на сохраненный в базе данных.У меня проблема в том, что некоторые пользователи не могут создать сеанс.В результате они не могут войти в систему, добавлять предметы в корзину и т. Д. Также влияют токены CSRF, поскольку они хранятся в сеансе.Я не могу воссоздать проблему.

Моя конфигурация сеанса выглядит следующим образом

session:
        cookie_domain: "%host%"
        cookie_httponly: true
        #handler_id: session.handler.native_file
        #save_path: "%kernel.root_dir%/../var/sessions/%kernel.environment%"
        handler_id: Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler
        cookie_secure: true
        gc_maxlifetime: 43200 #12 hours
        gc_probability: 1
        gc_divisor: 50
        cookie_lifetime: 0

Кажется, что если пользователь очищает кеш браузера, то все снова в порядке.Однако я не могу просить клиентов сделать это.Может быть, в их браузере есть устаревшие данные сеанса, которые не исчезнут?Если пользователь пытается войти в систему, я вижу успешную регистрацию в БД, но они говорят, что не вошли в систему.

Это влияет только на некоторых клиентов.я не смог сузить его до какого-либо конкретного браузера или платформы, но кажется, что большинство отчетов для Chrome.Если они попробуют в другом браузере, то это сработает.

Если я попробую сам, это сработает, и я смогу увидеть файл cookie PHPSESSID в моих инструментах разработки.

Одна вещь, которую я попробовал, как я думал, может бытьбыло два конфликтующих куки-файла PHPSESSID (один с предыдущим. в домене, а другой нет), который должен был добавить этот бит javascript на каждую страницу

document.cookie = "PHPSESSID =; Path = /; expires = Чт, 01Январь 00:00:01 GMT; ";

Это, я думаю, гарантирует удаление дубликата.Однако это не решило проблему.

Я немного озадачен тем, как отладить эту проблему.Может кто-нибудь предложить какой-либо совет, пожалуйста?

1 Ответ

0 голосов
/ 07 декабря 2018

Я решил проблему, написав php-скрипт для удаления обоих конфликтующих файлов cookie сеанса из браузера пользователя.Один с предыдущей точкой на доменном имени, а другой без.Затем они смогли правильно использовать один сеансовый файл cookie.Казалось, проблема возникла между переходом с файлов сеанса php и сохранением сеанса в базе данных.В Chrome он сохранял файл cookie сеанса php в браузере без предшествующей точки в домене.После внесения изменений в сохранение сеанса в базе данных пользователи, у которых уже есть этот файл cookie сеанса, в итоге получили дубликат, который затем вступил в конфликт.Также в Symfony 4 теперь есть правильный способ переноса сессий - https://symfony.com/blog/new-in-symfony-4-1-session-improvements

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

...