Подтвердить что ты не робот

PHP: управление доменом/субдоменом файлов cookie

Я работаю над сайтом с несколькими субдоменами, некоторые из которых должны получить свой собственный сеанс.

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

Если я просто сделаю:

session_start();

В итоге я получаю файлы cookie сеанса следующим образом:

subdomain.example.net

Однако, если я сделаю попытку самостоятельно установить домен cookie, либо

ini_set('session.cookie_domain', 'subdomain.example.net');

или как

session_set_cookie_params( 0, "/", "subdomain.example.net", false, false);

В итоге я получаю файл cookie для .subdomain.example.net(обратите внимание на открытую точку), что, я считаю, означает "сопоставить все поддомены (или в данном случае суб-поддомены).

Это похоже на все мои файлы cookie, а не только на сеанс. Если я сам установил домен cookie, у него автоматически будет точка, добавленная, что означает этот домен и все его дочерние элементы. Если я не устанавливаю домен, он получает это право, используя только текущий домен.

Любая идея, что вызывает это, и что я могу сделать, чтобы контролировать эту добавочную точку?

Спасибо!

4b9b3361

Ответ 1

Функции cookie PHP автоматически префикс $domain с точкой. Если вы не хотите этого поведения, вы можете использовать функцию header. Например:

header("Set-Cookie: cookiename=cookievalue; expires=Tue, 06-Jan-2009 23:39:49 GMT; path=/; domain=subdomain.example.net");

Ответ 2

Если вы запустите PHP script под " http://subdomain.example.net", не используйте параметр домена:

setcookie('cookiename','cookievalue',time()+(3600*24),'/');

Вы получите cookie с "subdomain.example.net" (а не ".subdomain.example.net" )

Ответ 3

Если вы прочитаете все RFC 6265, вы поймете, что единственный правильный способ иметь cookie только для хоста - НЕ устанавливать атрибут домена.

http://tools.ietf.org/html/rfc6265#section-5.4

Ответ 4

Я понимаю, что это старый вопрос, но у меня была эта проблема, и ни один из ответов выше не сделал этого.

Я хотел установить cookie сеанса для субдомена, но также включить httponly и secure.

Чтобы избежать лидерства. infront поддомена, Kevin и stolsvik правильны, не устанавливайте атрибут домена.

Чтобы сделать это и по-прежнему можно установить httponly и безопасный режим, установите для домена значение NULL следующим образом:

session_set_cookie_params(0, '/', NULL, TRUE, TRUE);

Теперь у вас будет сеансовый файл cookie для определенного субдомена (без ведущего.) с httponly и secure установлено в true.

Ответ 5

Это может помочь кому-то (я потратил несколько часов, чтобы понять это). После внесения изменений в исходные файлы и перед их тестированием закройте браузер, чтобы правильно уничтожить PHPSESSIONID во всех доменах и поддоменах.

Надеюсь, это сэкономит некоторое время!