На моем сайте у меня простая форма входа. Страница обслуживается через HTTP, но URL-адрес POST формы - HTTPS.POSTing to https form не всегда работает
Обычный метод заключается в том, что пользователь заполняет свое имя пользователя/пароль, форма отправляется (на полный URL-адрес HTTPS на том же сайте), а затем обработка POST перенаправляет 303 на домашнюю страницу пользователя , Но иногда этого не бывает.
Цикл (и это 100% повторяемостью) заключается в следующем:
- Посещать форма Логин, заполнить детали и представить
- На сервере скрипт Логин вызывается, проверяет данные, а затем, если все хорошо, перенаправляет 303 на домашнюю страницу пользователей.
- Затем я выхожу на выход и затем выберет логин, после чего я вернусь в форму для входа
- Затем я снова заполняю свои данные, нажимаю submit.
- На этот раз логика входа в систему не выполняется (код отладки, который зарегистрировал логин на шаге 2, не вызван), и все же я все еще перенаправлен на домашнюю страницу пользователей. Но поскольку я не был успешно зарегистрирован, меня выгнали на первую страницу ...
Так почему же POST не всегда вызывает форму для входа? Я не думаю, что 303 кэшируется (и это не должно быть, согласно спецификации).
Глядя на журналы HTTPS на сервере, login.phpo вызывается в первый раз, но не второй ....
Edit:
Хорошо, мы решили эту проблему. Для тех, кто заинтересован:
Сайт работает на 2 веб-серверах за балансиром нагрузки. пользовательские сессии «липкие» - то есть, как только пользователь просматривает один веб-сервер, LB будет держать их «прикрепленными» к этому серверу. Это делается через файл cookie. Но как только мы переключаемся на HTTPS, LB не может читать cookie, поскольку соединение зашифровывается между браузером и веб-сервером. Таким образом, он чередовался между серверами. WWe имеет код для распространения аутентификации входа между веб-серверами, но этого не происходит достаточно быстро. Так что происходящее:
- браузеры пользователей на сервере А, получает печенье говоря: «держать меня на А», заполняет их учетные данные для входа и хиты отправить
- ЛБ, будучи не в состоянии расшифровать трафик HTTPS (и, следовательно, cookie), отправляет их в 50% случаев на B
- B проверяет логин и устанавливает, что пользователь должен пройти аутентификацию в сеансе, прежде чем перенаправить пользователя на домашнюю страницу без https
- Поскольку домашняя страница non https, LB считывает файл cookie и отправляет его в A, который ничего не знает об аутентификации, поскольку он не достаточно быстро распространяется от B ...
Решение заключалось в том, чтобы позволить LB расшифровывать трафик HTTPS, тем самым гарантируя, что пользователи действительно остаются на одном веб-сервере независимо от переходов HTTP/HTTPS.
Это, безусловно, поможет, если вы сможете опубликовать свой код. – Seb