установите только сеанс php www.website.tld и www.apps.website.tld

#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(); Это исправляет ошибки заголовка для меня.