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, у него автоматически будет точка, добавленная, что означает этот домен и все его дочерние элементы. Если я не устанавливаю домен, он получает это право, используя только текущий домен.
Любая идея, что вызывает это, и что я могу сделать, чтобы контролировать эту добавочную точку?
Спасибо!
Ответы
Ответ 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 во всех доменах и поддоменах.
Надеюсь, это сэкономит некоторое время!