#php #session #cookies
#php #сеанс #файлы cookie
Вопрос:
Мне нужен только файл cookie сеанса на www.website.tld и www.apps.website.tld , по возможности используя ini_set. Также мне нужно установить все файлы cookie, которые я записываю, только для обоих поддоменов. Я не хочу www.imgs.website.tld чтобы иметь файлы cookie. в php-сессии я немного не уверен. Файлы cookie, которые я установил самостоятельно, моя идея состояла в том, чтобы вызвать SetBothCookie($name,$value,$ time) пользовательскую функцию.
function SetBothCookie($name,$value,$time)
{
setcookie($name, $value, $time, "", "www.website.tld", 1);
setcookie($name, $value, $time, "", "www.apps.website.tld", 1);
}
Итак, я думаю, что у меня отключена часть SetBothCookie, но хотелось бы посмотреть, что другие думают об этом коде. Часть, на которой я застрял, заключается в том, что php установил cookie сеанса в обоих поддоменах. Я использую session_set_save_handler
для переопределения хранилища сеансов php по умолчанию для хранения сеансов в базе данных, чтобы оба сервера могли использовать одни и те же данные сеанса. Насколько я понимаю, если я поставлю Javascript, который выполняет http-запросы на www.apps.website.tld для www.website.tld это не позволит им произойти, и я хочу, чтобы это добавило безопасности, поэтому я запускаю только часть сайта на поддомене.
Ответ №1:
Эта функция должна работать, но…
Используя secure
параметр в set_cookie() в соответствии с руководством по PHP
Указывает, что файл cookie должен передаваться от клиента только по защищенному HTTPS-соединению. Если установлено значение TRUE, файл cookie будет установлен только при наличии защищенного соединения.На стороне сервера программист должен отправлять такого рода cookie только по защищенному соединению (например, по отношению к $_SERVER[«HTTPS»]).
Поэтому я предлагаю удалить 6-й параметр функции set_cookie().
Кроме того, вы можете вызвать эту функцию перед любым выводом, иначе она выдаст предупреждение типа
Предупреждение: невозможно изменить информацию заголовка — заголовки, уже отправленные (вывод начался с …) в … в строке XX
Использование session_set_save_handler() является хорошим решением для получения контроля над переменными сеанса.
Если вам нужны файлы cookie для всего домена, просто используйте "/"
or ".website.tld"
(с начальной точкой в соответствии со стандартом RFC 2109) для domain
параметра (5-й по счету). Параметр path
должен быть ""
(пустая строка; 4-й).
Комментарии:
1. Я оборачиваю веб-сайт в ob_start(); и ob_end_flush(); Это исправляет ошибки заголовка для меня.