PHP setcookie() для домена, но НЕ поддомены

Можно ли установить cookie, который не читается на субдоменах? Другими словами, куки файлы доступны на domain.com, но не www.domain.com или xyz.domain.com.

//this is what i'm "intending"...
setcookie($name,$value,$expires,'/','domain.com');
//however, this is how it behaves:
setcookie($name,$value,$expires,'/','.domain.com');

Обоснование: я настраиваю статический CDN на субдомене и не хочу, чтобы файлы cookie сеанса пользователя возвращались туда и обратно для каждого изображения, файла css, js файла и т.д.

... мне нужно вернуться к использованию www.domain.com для моего сайта? Есть ли способы обхода?

Ответ 1

По-видимому, ожидается наличие cookie на "domain.com", которое будет соответствовать "*.domain.com".

Например: состояние HTTP-COKKIES СТАТИСТИЧЕСКОГО КЛИЕНТА (на мой взгляд):

domain=DOMAIN_NAME

При поиске списка файлов cookie для действительные файлы cookie, сравнение атрибуты домена cookie с доменным именем в Интернете хост, с которого будет указан URL-адрес неправдоподобным....
"Соответствие хвоста" означает этот атрибут домена сопоставляется против хвоста полностью квалифицированное доменное имя хоста. атрибут домена "acme.com" совместить имена хостов "anvil.acme.com" как а также "shipping.crate.acme.com" .

Только хосты в указанном домене может установить cookie для домена и домены должны иметь не менее двух (2) или три (3) периода в них предотвратить домены формы: ".com", ".edu" и "va.us". Любой домен, который терпит неудачу в одном из семи специальных домены верхнего уровня, перечисленные ниже требуется два периода. Любой другой домен требуется не менее трех. Семь специальные домены верхнего уровня: "COM", "EDU", "NET", "ORG", "GOV", "MIL" и "INT".

Итак, вам придется либо:

  • используйте "www.domain.com" для вашего сайта.
  • или использовать совершенно другое доменное имя для вашего статического контента (например, ".anotherdomain.com" )
    • например, это то, что делается в stackoverflow: статический контент подается с sstatic.net

Ответ 2

Именно по этой причине довольно много сайтов (включая этот) регистрируют выделенный домен для использования в качестве CDN.

Ответ 3

Это невозможно, так как домен cookie хвост сопоставлен с именем домена. Вам придется пойти с www.

Ответ 4

Конечно, вы можете! Это то, что делают большинство сайтов. Даже встроенная функция php session_start() делает это. и его HTTP-заголовок ответа Set-Cookie выглядит так же просто, как этот:

Set-Cookie: PHPSESSID=fe26eaac143ef75ffcbc91bbe5780d0d; path=/

Согласно RFC 6265, раздел 4.1.2.3, последнее утверждение в абзаце:

Если сервер пропускает атрибут Домена, пользователь    Агент вернет файл cookie только на исходный сервер.

Итак, все, что вам нужно сделать, это пропустить атрибут домена при настройке cookie из вашего domain.com

setcookie($name,$value,$expires,'/','');

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