PHP cookie пишет на неверный домен - PullRequest
6 голосов
/ 06 июля 2010

У меня есть файл cookie, который я использую в своем приложении.Это выглядит так:

+-------+-------+-----------------------+-------+----------+
| Name  | Value | Domain                | Path  | Expires  |
+-------+-------+-----------------------+-------+----------+
| foo   | bar   | my.domain.tld         | /     | Session  |
+-------+-------+-----------------------+-------+----------+

В разделе моего скрипта, основываясь на каком-то условии, я пытаюсь изменить значение файла cookie.Я использую этот код:

// overwrite cookie
if($condition){
  setcookie("foo", "cat", 0, "/", "my.domain.tld");
}

После этого мои файлы cookie выглядят так:

+-------+-------+-----------------------+-------+----------+
| Name  | Value | Domain                | Path  | Expires  |
+-------+-------+-----------------------+-------+----------+
| foo   | bar   | my.domain.tld         | /     | Session  |
| foo   | cat   | .my.domain.tld        | /     | Session  |
+-------+-------+-----------------------+-------+----------+

Почему к домену добавляется .?Я хочу перезаписать существующий файл cookie.

Ответы [ 3 ]

1 голос
/ 06 июля 2010

http://www.php.net/manual/en/function.setcookie.php#93641

Ответ обсуждается в посте руководства по php.

Данные cookie устанавливаются агентом просмотра и обрабатываются по-разному в зависимости от процесса, используемого браузером.

0 голосов
/ 06 июля 2010

Как оказалось, указание домена не работает:

setcookie("foo", "cat", 0, "/");

Ожидаемые данные cookie:

+-------+-------+-----------------------+-------+----------+
| Name  | Value | Domain                | Path  | Expires  |
+-------+-------+-----------------------+-------+----------+
| foo   | cat   | my.domain.tld         | /     | Session  |
+-------+-------+-----------------------+-------+----------+

Странно, но это работает.

0 голосов
/ 06 июля 2010

Из документации:

Домен, в котором доступен файл cookie. Чтобы файл cookie был доступен во всех поддоменах сайта example.com, установите для него значение «.example.com». . не требуется, но делает его совместимым с большим количеством браузеров. Установка этого параметра на www.example.com сделает куки доступными только в поддомене www. Обратитесь к соответствию хвоста в »спецификации для деталей.

И спецификация соответствия хвоста здесь:

http://curl.haxx.se/rfc/cookie_spec.html

...