setcookie () не устанавливает cookie в Google Chrome - PullRequest
32 голосов
/ 01 мая 2011

Я прохожу некоторые уроки PHP о том, как устанавливать куки. Я заметил, что файлы cookie успешно установлены на FF4 и IE9, однако они не устанавливаются в Chrome (11.0.696.60). Файл PHP был предоставлен из XAMPP (localhost).

Я попробовал пример из w3schools:

<?php
setcookie("user", "Alex Porter", time()+3600);
?>

А с этого сайта (для локальных сред):

<?php
setcookie("username", "George", false, "/", false);
?>

Заранее спасибо.

Ответы [ 6 ]

39 голосов
/ 01 мая 2011

Отключение файлов cookie для IP-адресов и localhost было дизайнерским решением. Смотрите также: https://code.google.com/p/chromium/issues/detail?id=56211

Способы решения этой проблемы:

  • Установите локальный домен (например, отредактируйте /etc/hosts для использования 127.0.0.1 localhost.com).
  • Используйте http://myproject.localhacks.com/ (что указывает на 127.0.0.1).
  • Использовать пустое значение домена при настройке cookie.

Например, в PHP :

setcookie(
  $AUTH_COOKIE_NAME,
  $cookie_value,
  time() + cookie_expiration(),
  $BASE_DIRECTORY,
  null,
  false,
  true
);

Здесь значение null указывает, что домен не должен быть установлен.

Примечание: отсутствие настройки домена препятствует тому, чтобы cookie был виден субдоменам.

14 голосов
/ 18 апреля 2013

Домен должен быть равен NULL.

& Должен быть указан срок годности. то есть.,

setcookie("username", "George", time() + (20 * 365 * 24 * 60 * 60), "/", NULL);
5 голосов
/ 02 мая 2011

Похоже, что это может быть ошибка с функцией "Инструменты разработчика" в Chrome. Все время я пытался установить cookie (но не получить его), и он работал с другим браузером. Это сработало, если вы доверяете разделу просмотра файлов cookie в FF или находите файл cookie для IE. В Chrome я использовал раздел «Файлы cookie» в разделе «Инструменты разработчика» (Инструменты разработчика> Ресурсы> Файлы cookie).

Я решил пойти дальше и на самом деле вывести значение куки, используя этот скрипт, найденный в WHT ( от Natcoweb ):

<?php
setcookie('test', 'This is a test', time() + 3600);
if(isset($_COOKIE['test'])){
$cookieSet = 'The cookie is ' . $_COOKIE['test'];
} else {
$cookieSet = 'No cookie has been set';
}
?>

<html>
<head><title>cookie</title></head>
<body>

<?php
echo $cookieSet;
?>

</body>
</html>

И это работало во всех браузерах, включая Chrome (я получаю: «Cookie - это тест»)! Однако инспектор файлов cookie Chrome продолжает показывать: «На этом сайте нет файлов cookie». Мне также удалось найти список файлов cookie, хранящихся в настройках Chrome («Параметры»> «Под капотом»> «Настройки содержимого»> «Все файлы cookie и данные сайта»), и, наконец, нашел файл «cookie» (больше шагов для проверки, но по крайней мере более точным, чем инструменты разработчика)!

Вывод: файлы cookie были установлены, но инструменты разработки Chrome по какой-то причине не видят его.

2 голосов
/ 12 апреля 2012

Вы проверили системную дату? $ date И если это старое время, то вы должны изменить свое время $ date -s 2007.04.08-22: 46 + 0000

Надеюсь, это поможет. У меня была такая же проблема, и она работала

1 голос
/ 19 апреля 2014

Этот код работает для меня в IE, Chrome и FF

if($_COOKIE['language']==NULL || empty($_COOKIE['language']))
{


    $dirname = rtrim(dirname($_SERVER['PHP_SELF']), '/').'/';

    $expire=time()+31536000;


    setcookie("language", "English",$expire,"$dirname","mydomain.com",false,false);
}
1 голос
/ 13 апреля 2012

Я столкнулся с той же проблемой, когда пытался, как показано ниже

setcookie("gb_role",base64_encode($_SESSION["role"]),time()+60*60*24*30);

, когда я изменил его на значение ниже

setcookie("gb_role",base64_encode($_SESSION["role"]),time()+2592000);

Я просто работал нормально, разница вместо времени ()+ 60 * 60 * 24 * 30 я только что сделал time () + некоторое числовое значение работы.Я знаю, что это не имеет смысла, но это сработало.

...