← Cloudflare Cache / cache / troubleshooting
Проблемы с динамическим контентом и входом в систему
Такие динамические страницы, как формы входа, процессы оформления заказа и защищённые авторизацией маршруты приложения, могут работать некорректно при слишком агрессивном кешировании.
Распространённые симптомы:
- Пользователи могут открыть страницу входа, однако после отправки формы вход не выполняется.
- Сессии не сохраняются после успешного входа в систему.
- Источник отправляет
Set-Cookieзаголовок, но браузер так и не сохраняет cookie. - Появляется страница проверки, но после её прохождения пользователь возвращается на страницу входа или теряет состояние формы.
Закешированная страница входа удаляет сессионные cookie
Одной из распространённых причин является Cache Rule или устаревшее правило Page Rule, настроенное для кеширования динамического HTML.
Обычно это происходит при одновременном выполнении следующих условий:
- Страница настроена как Подлежит кешированию или Cache Everything.
- Ответ представляет собой динамический HTML, например
/loginили/account. - Источник отправляет
Set-Cookieзаголовок. - Одна Edge TTL или переопределение TTL по коду состояния переопределяет директивы кеширования источника.
При такой настройке Cloudflare может кешировать ответ и удалить Set-Cookie заголовок до того, как ответ будет сохранён на периферийном сервере. В результате браузер получает страницу входа, но так и не получает сессионный cookie-файл, необходимый для следующего запроса.
Как подтвердить
Проверьте ответ для страницы входа или другого динамического маршрута.
Если вы видите оба следующих признака, страница, вероятно, кешируется, хотя не должна:
CF-Cache-Status: HITилиCF-Cache-Status: EXPIRED- Нет
Set-Cookieзаголовок в ответе, даже если ваш источник обычно его устанавливает
После отправки формы также могут возникать сбои, специфичные для конкретного фреймворка, например:
- Перенаправление обратно на страницу входа
-
403или500после входа в систему - Ошибки проверки CSRF
- Отсутствует состояние сессии на стороне сервера
Эта проблема часто встречается во фреймворках, которые полагаются на сессионный или CSRF cookie при первой загрузке страницы, включая JavaServer Faces, ASP.NET, обработчики сессий PHP, Django, Rails и Laravel.
Решение
Не кешируйте страницы входа и другой HTML, требующий аутентификации.
Вместо этого:
- Ограничьте Подлежит кешированию или Cache Everything только к статичным путям.
- Добавьте более точное правило Cache Rule, которое обходит или отключает кеширование для таких маршрутов, как
/login,/account,/cart,/checkout, и пути API приложения. - Если источник должен управлять кешированием, удалите переопределение Edge TTL, которое принудительно кеширует страницу.
- Убедитесь, что исправленный ответ теперь возвращает
CF-Cache-Status: DYNAMIC,MISS, илиBYPASS, и сохраняетSet-Cookie.
Дополнительные сведения о поведении cookie см. в разделе Взаимодействие заголовка ответа Set-Cookie с кешем.
Циклы проверок при входе в систему или отправке форм
Проверки безопасности также могут прерывать динамические сценарии.
Два распространенных варианта:
- Проверка запускается при первом
GETзапрос страницы входа. Пользователь проходит проверку, но приложение теряет исходный контекст сеанса или CSRF. - Проверка запускается на
POSTзапрос, отправляющий форму входа или другое важное действие. Браузеру может потребоваться повторить запрос после прохождения проверки, из-за чего исходная отправка формы может нарушиться.
Как подтвердить
Проверьте, есть ли Пользовательское правило WAF, управляемое правило, или правило ограничения частоты запросов применяется к пути входа.
Если проблема затрагивает только такие маршруты, как /login, /signin, /checkout, или /api/auth/*, и приложение работает при отключённой проверке для этих путей, вероятно, именно проверка нарушает работу процесса.
Решение
Используйте один из следующих подходов:
- Исключите путь входа в систему или отправки формы из challenge rule.
- Сузьте выражение правила так, чтобы оно применялось только к подозрительному трафику.
- Если маршрут необходимо защитить, используйте менее навязчивую проверку при загрузке страницы, а более строгие меры применяйте в других точках сценария.
При отладке также проверьте, что правила не совпадают с путями, сгенерированными Cloudflare, например с /cdn-cgi/*.
Дополнительные сведения о поведении, связанном с проверками, см. в разделе Устранение неполадок с правилами и Устранение неполадок Cloudflare WAF.