// Для site.com
setcookie("TestCookie", 1, time() + 3600, "/");
// или
setcookie("TestCookie", 1, time() + 3600, "/", "site.com");
// или
setcookie("TestCookie", 1, time() + 3600, "/", "www.site.com");
// Для test.site.com
setcookie("TestCookie", 1, time() + 3600, "/", "test.site.com");
domain
(Под)домен, которому доступны cookie. Задание поддомена (например, 'www.example.com') сделает cookie доступными в нем и во всех его поддоменах (например, w2.www.example.com). Для того, чтобы сделать cookie доступными для всего домена (включая поддомены), нужно просто указать имя домена (то есть 'example.com').
// Для site.com
setcookie("TestCookie", 1, time() + 3600, "/", "");
// Для test.site.com
setcookie("TestCookie", 1, time() + 3600, "/", "test.site.com");
// Либо так (для site.com и всех его поддоменов)
setcookie("TestCookie", 1, time() + 3600, "/", ".site.com");
и как дальше не ставь - будет приходить она
так не получится же
кука поставленная для site.com будет приходить для всех субдоменов
// если установить так
setcookie("TestCookie", 1, time() + 3600, "/", "");
// или так
setcookie("TestCookie", 1, time() + 3600, "/", "www.site.com");
Согласно RFC 6265, раздел 4.1.2.3, последнее утверждение в абзаце:
Если сервер опускает атрибут домена, то пользователь агент вернет файл cookie только на исходный сервер.
Таким образом, все, что вам нужно сделать, это опустить атрибут домена при установке файла cookie из вашего domain.com
setcookie($name,$value,$expires,'/','');
Для дальнейшего подтверждения я проверил его сам и могу заверить вас, что файлы cookie недоступны из поддоменов, когда вы устанавливаете их, опуская атрибут домена.
// или так setcookie("TestCookie", 1, time() + 3600, "/", "www.site.com");
domain
(Под)домен, которому доступны cookie. Задание поддомена (например, 'www.example.com') сделает cookie доступными в нем и во всех его поддоменах (например, w2.www.example.com).
если не указывать домен, то ставится для того, с которого ставишь.
setcookie("TestCookie", 1, time() + 3600, "/");
setcookie("TestCookie", 1, time() + 3600, "/", "");