Интересно, может ли кто-нибудь пояснить, почему это происходит при использовании samesite
в сеансе php Cook ie.
example.com имеет следующее:
session_name('Example_Login');
session_set_cookie_params(['lifetime' => 0, 'path' => '/', 'domain' => '.example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'strict']);
session_start();
test.com имеет следующую форму публикации на example.com:
<form method="post" action="https://www.example.com/" target="_blank" autocomplete="off">
<input type="hidden" name="username" value="demo_user">
<input type="hidden" name="password" value="demo_password">
<input type="hidden" name="signin" value="signin">
<button type="submit" name="submit">Login</button>
</form>
example.com получает сообщение, а с php я использую переменные $ _POST, отправленные для проверки входа в систему учетные данные и войдите в систему. Если эти значения действительны, пользователь не авторизуется на сайте example.com. Если я изменю параметр samesite в сеансе cook ie на example.com на 'lax', опубликованная форма будет работать должным образом.
Я прочитал параметр samesite перед его добавлением и ничего не увидел это запомнилось мне, где это повлияет на сообщения / получение. Что мне здесь не хватает? Я не понимаю, как параметр samesite КАКИ-либо влияет на то, что я здесь делаю. Я отправил сообщение из другого домена, получил переменные и сделал несколько logi c с php ... какое отношение имеет параметр samesite для сеанса cook ie к чему-либо здесь?
ОБНОВЛЕНИЕ:
Я немного отладил. Переменные сообщения отправляются и принимаются нормально, сеанс создается на example.com и создает множество переменных $ _SESSION, et c. Я сузил проблему до перенаправления, которое происходит после проверки имени пользователя / пароля в php. Если пользователь / пароль правильный и учетная запись существует, я сохраняю информацию о пользователе в $ _SESSION, тогда я вызываю следующее в php:
header("Location: /main.php");
exit();
Перенаправление происходит и при достижении main. php $ _SESSION пусто. Все его переменные исчезли. Я повторил это, и он показывает следующее:
Array
(
[user] => Array
(
[session] => 1
)
)
Я переключаю параметр samesite на 'lax'. Запустите ту же самую отладку, и $ _SESSION заполнится моей пользовательской информацией, как и ожидалось, которая была помещена туда перед перенаправлением.
Я также изменил свое перенаправление на абсолютное как header("Location: https://www.example.com/main.php");
, чтобы увидеть, повлияло ли это, но проблема все еще остается.
Итак, мой вопрос теперь ... при использовании samesite='strict'
в моем сеансе ... почему сеанс очищается после перенаправления на страницу в том же домене?
ОБНОВЛЕНИЕ 2:
Я изменил путь сохранения сеанса на другое место специально для отладки и посмотреть, что произойдет. Когда он достигает example.com, он создает файл сеанса, и значения, которые я добавил в него, уже там. Когда он достигает example.com/main.php (перенаправление), он создает новый файл сеанса, как показано выше. Мои настройки сеанса и запуск находятся в отдельном файле, который требуется в первую очередь на этих страницах:
session_name('Example_Login');
session_set_cookie_params(['lifetime' => 0, 'path' => '/', 'domain' => '.example.com', 'secure' => true, 'httponly' => true, 'samesite' => 'strict']);
session_start();
Итак, с samesite = 'strict' выше создается новый сеанс, но с samesite = 'lax' он использует тот же файл сеанса, что и на предыдущей странице. Что дает? Я вижу, где что-то идет не так, но не вижу, почему это происходит или как это исправить.
ОБНОВЛЕНИЕ 3:
Создан очень простой тест, чтобы продемонстрировать, что происходит и почему. См. Ответ ниже. Можно целый день спорить со мной, объясняя, почему это работает именно так, но я думаю, что лог c, происходящий здесь, ошибочен.