Я могу видеть содержимое файлов cookie только на странице, на которой оно установлено. Почему?

#php #cookies

Вопрос:

Я не знаю, задавался ли этот вопрос раньше, но я не знаю, что искать по этой проблеме. У меня есть страница с формой и запросом AJAX. PHP-код асинхронно проверяет, существует ли пользователь, и устанавливает файл cookie, когда пользователь запрашивает автоматический доступ. Файл cookie настроен, код, похоже, работает хорошо. Если я попытаюсь прочитать содержимое файлов cookie на той же странице с формой входа в систему (после обновления это нормально — я знаю), я смогу это увидеть. Но когда я пытаюсь прочитать то же содержимое файла cookie с другой страницы, файл cookie не существует. Это как если бы он не был установлен. Как это возможно?

Чтобы провести тест, я также отключил перенаправление JS, как только скрипт jquery получил ответ об успешном выполнении, но это не устраняет проблему.

PHP, который запускается с запросом jquery.ajax (он показывает мне правильный текст):

 setcookie("access", $string, time() 31536000);
if(isset($_COOKIE['access'])) echo "Cookie exists.<br>";
echo "Cookie content: ".$_COOKIE['access'];
 

connection.php вызывается на других страницах веб-сайта (файл cookie кажется пустым или несуществующим):

 require_once("connection.php");

if(isset($_COOKIE["access"]))
{
  echo "I'm in!<br>";
  echo "Cookie content: ".$_COOKIE['access'];
}
 

Ответ №1:

setcookie Функция принимает 4-й параметр с именем $path , который ограничивает доступ к файлам cookie. По умолчанию $path-это страница, на которой установлен файл cookie. Если вместо этого вы хотите, чтобы файл cookie был доступен со всех страниц, вам необходимо установить параметр $path в корневой каталог вашего домена, поэтому / .

Вот краткое исправление для вашего кода

 setcookie("access", $string, time() 31536000, "/");
 

Более подробную информацию о параметрах setcookie можно найти в официальной документации по PHP.

Комментарии:

1. Быстро и безболезненно! Спасибо вам 🙂