Как узнать, почему печенье не отправляется?

Я использую Chrome, и мне интересно, есть ли расширение или метод, чтобы сказать, почему cookie не отправляется.

У меня есть одна просьба к http://dev/login и он возвращается,

Set-Cookie:DevId=cffbc7e688864b6811f676e181bc29e6; domain=dev; path=/; expires=Tue, 16-Jun-2015 21:27:43 GMT

Тем не менее, на пост в http://dev/Base/User/home/ Я не отправляю DevId печенье. Я хотел бы знать, почему печенье не отправляется, если кто-то узнает. Но, кроме того, я хотел бы знать, как я могу сказать, почему и как лучше отладить эту проблему в будущем.

Вот некоторые запросы, полученные из инструментов разработчика Chrome

Так вот мой ответ от /login (обратите внимание на заголовок Set-Cookie),

HTTP/1.1 200 OK
Date: Tue, 16 Jun 2015 19:57:43 GMT
Server: Apache
Pragma: no-cache
Cache-control: no-cache, max-age=0
Set-Cookie: DevId=cffbc7e688864b6811f676e181bc29e6; domain=dev; path=/; expires=Tue, 16-Jun-2015 21:27:43 GMT
Cache-Control: max-age=0
Expires: Tue, 16 Jun 2015 19:57:43 GMT
Keep-Alive: timeout=10, max=10
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: application/json; charset=ISO-8859-1

А вот и мой пост /Base/User/home/1 (обратите внимание, нет cookie),

POST /Base/User/home/ HTTP/1.1
Host: dev
Connection: keep-alive
Content-Length: 0
Origin: http://dev
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/43.0.2357.81 Chrome/43.0.2357.81 Safari/537.36
Content-type: application/x-www-form-urlencoded; charset=UTF-8
Accept: text/javascript, text/html, application/xml, text/xml, */*
X-Prototype-Version: 1.7.2
X-Requested-With: XMLHttpRequest
Referer: http://dev/user/1/home
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8

8 ответов

Я нашел способ узнать, почему файл cookie не отправляется:

  • Перейдите на вкладку сети и щелкните запрос, который не отправляется с вашим файлом cookie.

  • Перейдите на только что появившуюся вкладку "Cookies".

  • Установите флажок "Показать файлы cookie отфильтрованных запросов", чтобы увидеть все файлы cookie, которые не были отправлены, они будут выделены желтым цветом.

Затем рядом со свойством, препятствующим отправке файла cookie, появится небольшая метка "i". Вы можете навести указатель мыши, чтобы увидеть детали.

В моем случае это произошло потому, что Fetch API не отправляет файлы cookie, если credentials: "include" дается как опция.

fetch('API_ENDPOINT',{
  method: 'POST',
  credentials: 'include',
  body: JSON.stringify(some_json_obj)
})

Кроме того, мне пришлось настроить серверную часть CORS для Node.js ( express.js) следующим образом.

const cors = require('cors')

const corsOptions = {
  origin: 'http://localhost:3000',
  credentials: true
}

app.use(cors(corsOptions));

Это ошибка Chrome. Пока нет исправлений..

# 56211 сбой chrome.cookies для доменов localhost

https://code.google.com/p/chromium/issues/detail?id=56211

Может также захотеть прочитать этот вопрос. Это не относится к chrome, как этот вопрос, но это относится к поведению localhost (в отличие от этого вопроса).

Проблема заключается в следующем:

домен = DEV;

Цитата из RFC 2945:

Значение атрибута Domain указывает домен, для которого действует cookie. Если явно заданное значение не начинается с точки, пользовательский агент предоставляет начальную точку.

Таким образом, веб-клиент будет отправлять куки, только если адрес хоста заканчивается .dev.

Попробуйте отправить куки без атрибута домена.

Если вы используете междоменный запрос и используете клиент XHR (например, API извлечения), будьте осторожны с параметром withCredentials.

Свойство XMLHttpRequest.withCredentials является логическим значением, которое указывает, следует ли выполнять межсайтовые запросы контроля доступа с использованием учетных данных, таких как файлы cookie, заголовки авторизации или клиентские сертификаты TLS. Установка withCredentials не влияет на запросы того же сайта.

Я получил эту ошибку, когда устанавливал cookie без ; path=/указано в моих настройках cookie. Затем мой веб-сервер перенаправлял определенный запрос на мой веб-сервер по адресу/ и файл cookie не был установлен, потому что он действовал только для /auth там, где я его изначально установил.

Заметить, что Path выше "/auth", где он действителен. после установки пути в моем файле cookie:

`nz_auth_jwt=${jwt}; path=/; expires=...` 

Я видел свой cookie в последующих запросах. И подтвердил, что путь в инструментах разработчика был установлен правильно, чтобы быть действительным для всех маршрутов, что я хотел в моем случае.

Проблема, на которую ссылается Эван Кэрролл для хрома (теперь перенаправляется сюда: https://bugs.chromium.org/p/chromium/issues/detail?id=56211), кажется актуальной и помечена как "Исправлено". Хотя не очень понятно, как.

У меня были проблемы с записью хоста в / etc / hosts, например:

127.0.0.1   local.app.service.tld

Но после изменения

127.0.0.1   app.localhost

это работает как ожидалось снова. Я думаю, что chrome преуспел бы в выдаче небольшого уведомления об этом, когда это произойдет. Увы, это спасло бы всех нас от горя.

По состоянию на 2022 год в Chrome...

В Инструменты разработчика > вкладка «Сеть» > «Заголовки» > «Ответ» вы можете увидеть, почему файлы cookie не установлены.

Другие вопросы по тегам