Задать вопрос
leni_m
@leni_m
ЧупаКобрус

Как работать с куки?

html
<form id="test">
    ...
</form>
<div id="test2"></div>
<script>
    $('#test').on('submit', function () {
        var params = $(this).serialize();

        $.ajax({
            type: "POST",
            url: "index.php",
            data: params,
            headers: {
                'Cookie': document.cookie
            }
        })
            .done(function(msg) {
                $('#test2').html(msg);
            });
        return false;
    });
</script>

index.php
<?php setcookie ('test', '1', time() + 60*60*24);
        echo $_COOKIE['test'];

Почему ajax возвращает куки только на втором разе(т.е. куки запаздывает на 1 ajax запрос)?
Т.е. в данном случае при первой отправке ajax возвращает "Notice: Undefined index: test in ... ", а уже при второй отправке вернет "1".
Не могу понять, вроде бы сначала устанавливаем куки setcookie а потом выводим её
echo $_COOKIE. Не могу понять как пофиксить.
  • Вопрос задан
  • 130 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 1
@D3lphi
Потому что куки устанавливаются по средствам отправки заголовков ответа. Заголовки отправляются перед тем, как вы выводить что-то (через echo, например). $_COOKIE же в свою очередь заполняется при получении заголовков запроса. То есть, до начала выполнения кода. Таким образом, получается, что этот массив во время выполнения скрипта первый раз пуст.

Получается такая схема:

Первое выполнение скрипта:
1) Приходят заголовки запроса (Куки отсутствуют)
2) куки отсутствуют -> массив $_COOKIE пуст
3) Устанавливаем куки (массив $_COOKIE все еще пуст)
4) Отправляем заголовки ответа (массив $_COOKIE пуст), устанавливаем куки на клиенте

Второе выполнение скрипта:
1) Приходят заголовки запроса -> в них уже есть куки.
2) $_COOKIE теперь содержат то, что мы установили во время выполнения предыдущего скрипта.
...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽