2010-07-06 3 views
6

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

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

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

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

После этого мои данные печенье выглядит следующим образом:

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

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

+0

не имеет смысла, он должен быть установлен на что-либо .domain.tld, иначе есть где-то большая ошибка - единственное, что я осмелюсь предложить, это то, что вы снова проверяете и убедитесь, что первый файл cookie не является установленным на все, а не на второе. – nathan

+0

Натан, похоже, это не ошибка, так как это может быть общим источником путаницы. См. Ответ ниже: –

+0

Вы можете найти ['$ cookie-> setDomain ($ domain)'] (https://github.com/delight-im/PHP-Cookie/blob/004cde69ec840e65c15275e09b92ecb1da06f357/src/Cookie.php# L117) полезно, как показано в [этой автономной библиотеке] (https://github.com/delight-im/PHP-Cookie). Он заботится о нормализации имени домена, которое вы предоставили. – caw

ответ

0

Как выясняется, указав домен не похоже на работу:

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

Ожидаемое печенье данные:

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

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

1

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

Ответ обсуждается в сообщении на руководстве PHP.

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

0

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

домен, что печенье имеется. Чтобы сделать файл cookie доступным во всех поддоменах example.com, вы должны установить его на .example.com. . не требуется, но делает его совместимым с большим количеством браузеров. Установка его на www.example.com сделает cookie доступным только в субдомене www. Подробнее см. В описании хвоста в спецификации.

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

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

+0

Я должен был быть более конкретным. Под «ничего» я ​​имел в виду, что субдомен может быть чем угодно. Я не хотел сужать ответы до специфического субдомена 'www'. Чтобы быть более точным, я не хочу, чтобы файл cookie соответствовал * всем * субдоменам для домена. Я обновил свой вопрос. –

Смежные вопросы