Файлы cookie на локальном хосте с явным доменом - PullRequest
163 голосов
/ 16 июля 2009

Я, должно быть, скучаю по некоторым элементам cookie. На localhost, когда я устанавливаю cookie на стороне сервера, и явно указывают домен как localhost (или .localhost). cookie не принимается некоторыми браузерами.

Firefox 3.5: Я проверил HTTP-запрос в Firebug. То, что я вижу:

Set-Cookie:
    name=value;
    domain=localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/

или (когда я устанавливаю домен в .localhost):

Set-Cookie:
    name=value;
    domain=.localhost;
    expires=Thu, 16-Jul-2009 21:25:05 GMT;
    path=/

В любом случае файл cookie не сохраняется.

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

Opera 9.64: И localhost, и .localhost работают , но когда я проверяю список файлов cookie в настройках, домен получает значение localhost.local, даже если он указан в списке localhost. (в списке группировки).

Safari 4: И localhost, и .localhost работают , но они всегда указаны как .localhost в настройках. С другой стороны, cookie без явного домена, он отображается как просто localhost (без точки).

В чем проблема с localhost? Из-за такого количества несоответствий должны быть некоторые специальные правила, касающиеся localhost. Кроме того, мне не совсем понятно, почему домены должны начинаться с префикса? RFC 2109 прямо заявляет, что:

Значение атрибута домена не содержит встроенных точек или не содержит начать с точки.

Почему? В документе указывается, что это связано с безопасностью. Я должен признать, что я не прочитал всю спецификацию (возможно, сделаю это позже), но это звучит немного странно. Исходя из этого, установка куки на localhost будет невозможна.

Ответы [ 17 ]

1 голос
/ 24 января 2018

У меня была та же проблема, и я исправил ее, поместив 2 точки в самом имени файла cookie, не указав домен.

set-cookie: name.s1.s2=value; path=/; expires=Sun, 12 Aug 2018 14:28:43 GMT; HttpOnly
0 голосов
/ 10 января 2015

Ни один из ответов здесь не работал для меня.Я исправил это, поместив свой PHP как самую первую вещь на странице.

Как и другие заголовки, куки должны отправляться перед любым выводом из вашего скрипта (это ограничение протокола).Для этого необходимо, чтобы вы вызывали эту функцию перед любым выводом, включая теги и любые пробелы.

С http://php.net/manual/en/function.setcookie.php

0 голосов
/ 23 января 2019

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

0 голосов
/ 31 января 2017

Я немного поиграл.

Set-Cookie: _xsrf=2|f1313120|17df429d33515874d3e571d1c5ee2677|1485812120; Domain=localhost; Path=/

работает в Firefox и Chrome на сегодняшний день. Однако я не нашел способа заставить его работать с curl. Я попробовал Host-Header и --resolve, не повезло, любая помощь приветствуется.

Тем не менее, он работает в curl, если я установил его на

Set-Cookie: _xsrf=2|f1313120|17df429d33515874d3e571d1c5ee2677|1485812120; Domain=127.0.0.1; Path=/

вместо этого. (Что не работает с Firefox.)

0 голосов
/ 07 октября 2014

document.cookie = valuename + "=" + value + ";" + expires + "; домен =; путь = /";

this "domain =; путь = /"; будет принимать динамический домен, так как его cookie будет работать в поддомене. если вы хотите проверить в localhost, он будет работать

0 голосов
/ 15 июня 2011

Еще одна важная деталь: expires = должен использовать следующий формат даты и времени: Wdy, DD-Mon-YYYY HH: MM: SS GMT ( RFC6265 - Раздел 4.1.1 ).

Set-Cookie:
  name=value;
  domain=localhost;
  expires=Thu, 16-07-2019 21:25:05 GMT;
  path=/
0 голосов
/ 14 июля 2015

Существует проблема в Chromium, открытая с 2011 года , поэтому, если вы явно устанавливаете домен как 'localhost', вы должны установить его как false или undefined.

...