Отправка кук через AJAX в PHP
По умолчанию при AJAX запросе через
функцию fetch не будут отправляться
куки. Это регулируется настройкой credentials:
let response = await fetch('/ajax.php', {
method: 'GET',
credentials: 'some value here',
});
Давайте посмотрим, какие
значения может принимать
настройка credentials:
| Значение | Описание |
|---|---|
omit |
Не отправлять куки в запросе.
Эквивалентно отсутствию
параметра credentials.
|
same-origin |
Отправлять куки только если запрос идет на тот же домен, что и текущая страница. |
include |
Всегда отправлять куки даже при кросс-доменных запросах. |
Давайте теперь поработаем с куками.
Для начала по заходу на страницу
index.php установим куку:
<?php
setcookie('test', '!!!', time() + 3600);
?>
На странице ajax.php
выведем эту куку:
<?php
echo $_COOKIE['test'];
?>
Теперь выполним ручную проверку
работы. Зайдите вручную через браузер
сначала на index.php, а потом на ajax.php.
Убедитесь, что кука выводится.
Давайте теперь сделаем AJAX запрос
к нашей странице ajax.php.
При этом не будем устанавливать
настройку credentials.
В этом случае куки отправлены не будут,
на странице ajax.php значение
куки не выведется и в ответе
сервера мы ее не увидим:
let response = await fetch('/ajax.php', {
method: 'GET',
});
let text = response.text();
console.log(text); // куки нет
Давайте теперь установим настройку
credentials в значение same-origin.
В этом случае кука отправится,
будет доступна на сервере
и вернется к нам обратно в качестве ответа:
let response = await fetch('/ajax.php', {
method: 'GET',
credentials: 'same-origin',
});
let text = response.text();
console.log(text); // кука есть
По заходу на сайт запишите в куку время захода. При AJAX запросе пусть сервер вычислит, сколько времени прошло между заходом на сайт и совершением AJAX запроса.