Я работаю над сайтом с несколькими субдоменами, некоторые из которых должны получить свой собственный сеанс.
Я думаю, что у меня все получилось, но заметили что-то о обработке файлов 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, у него автоматически будет точка, добавленная, что означает этот домен и все его дочерние элементы. Если я не устанавливаю домен, тогда он становится прав, используя только текущий домен.
Любая идея, что вызывает это, и что я могу сделать, чтобы контролировать эту добавочную точку?
Благодаря!
Функции cookie PHP автоматически префикс $ domain с точкой. Если вы не хотите этого поведения, вы можете использовать функцию заголовка . Например:
header("Set-Cookie: cookiename=cookievalue; expires=Tue, 06-Jan-2009 23:39:49 GMT; path=/; domain=subdomain.example.net");
Если вы запустите свой PHP-скрипт в разделе « http://subdomain.example.net », не используйте параметр домена :
setcookie('cookiename','cookievalue',time()+(3600*24),'/');
Вы получите файл cookie с «subdomain.example.net» (а не «.subdomain.example.net»)
Если вы прочитаете все RFC 6265, вы поймете, что единственный правильный способ иметь cookie только для хоста – НЕ устанавливать атрибут домена.
Я понимаю, что это старый вопрос, но у меня была эта проблема, и ни один из ответов выше не сделал этого.
Я хотел установить cookie сессии для субдомена, но также включить httponly и secure.
Чтобы избежать лидерства. infront поддомена, Кевин и Столсвик правильны, не устанавливайте атрибут домена.
Чтобы сделать это и все еще иметь возможность установить httponly и безопасный режим, установите для домена значение NULL следующим образом:
session_set_cookie_params(0, '/', NULL, TRUE, TRUE);
Теперь у вас будет сеансовый файл cookie для определенного субдомена (без ведущего) с httponly и secure, установленным в true.
Это может помочь кому-то (я потратил несколько часов, чтобы понять это). После внесения изменений в исходные файлы и перед их тестированием закройте браузер, чтобы правильно уничтожить PHPSESSIONID во всех доменах и поддоменах.
Надеюсь, это сэкономит некоторое время!