#apache #google-chrome #nginx #session #cookies
#apache #google-chrome #nginx #сеанс #файлы cookie
Вопрос:
Проблема с постоянным сеансом, с которой сталкивается приложение после последних обновлений браузера (например, Google Chrome версии 84 и далее).
Когда приложение просматривается с использованием несовместимой версии браузера, приложение не может поддерживать постоянный сеанс при транзакции, которая выполняется через платежный шлюз. Благодаря этому пользователь автоматически выходит из системы после того, как пользователь перенаправлен обратно из платежного шлюза. Таким образом, пользователь не распознается как клиент, который инициировал платеж.
Эта проблема в основном возникает с Chrome 80 , все остальные браузеры работают нормально (Firefox, Safari, Edge, мобильные браузеры, такие как Samsung Internet и т.д.). Более старые версии Chrome также работают нормально (<=79).
Как это можно исправить?
Ответ №1:
Чтобы устранить вышеуказанную проблему, на приложении / прокси-сервере на vhost приложения (например, Apache vhost) должен быть настроен следующий заголовок изменения cookie.
Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=None
После применения вышеуказанной конфигурации сервер должен быть перезапущен.
Обратите внимание, что если приложение / прокси-сервер отличается от Apache (например, nginx), вышеуказанную конфигурацию следует соответствующим образом изменить.
Если вышеуказанная конфигурация выполнена успешно, в инструментах разработчика браузера в разделе Cookies замечается следующее изменение (например: firebug)
Значения HttpOnly amp; Secure должны быть true
, а значение SameSite должно быть none
.
Ответ №2:
Google Chrome не удаляет сеансовые cookie-файлы, он просто не устанавливает их в post-запросе от стороннего домена. Таким образом, вы можете создать страницу интерфейса для возврата с платежного сайта и сохранить опубликованное содержимое в сеансе, затем перенаправить пользователя на главную страницу подтверждения платежа. Кроме того, вы можете повторно опубликовать данные на странице подтверждения, не сохраняя их, используя HTML-форму. Пожалуйста, обратите внимание, что вы не должны проверять, зарегистрирован ли пользователь или какие-либо cookie-файлы на странице интерфейса.
Payment site ==post==> Interface page (cookie doesn't set)
Save the posted date to session
Interface page ==redirect==> confirmation page (cookie does set)