Курсы по JavaScript
Менторство: 200$ за курс. Репетиторство: 20$ за занятие. Жми для подробностей!
⊗jsPmBsSC 30 of 61 menu
Бесплатный курс: Практика на Реальных Проектах и Работы в Портфолио! Начало 11 ноября. Жми для записи!

Отправка кук через 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 запроса.