php "setcookie" не работает кросс-браузер? - PullRequest
1 голос
/ 18 февраля 2011

В настоящее время я использую setcookie для установки моих файлов cookie, однако он работает только в Firefox и Safari, а файлы cookie не устанавливаются в IE и Chrome (и, возможно, в других браузерах).

setcookie($name, $value, time()+3600 * 25);

Я прочитал в статье о setcookie и IE, что если срок действия истек (или слишком мал), IE просто игнорирует его.

Я знаю, что Javascript может устанавливать куки (я использую MooTools)но я бы предпочел использовать php, а MooTools и куки не работают для меня.

Любая помощь будет признательна.

Ответы [ 4 ]

3 голосов
/ 18 февраля 2011

Проверьте часы вашего сервера.Если он работает более чем на 25 часов позже, time() + 3600 * 25 может быть в прошлом, если говорить о браузере.

2 голосов
/ 18 февраля 2011

PHP определенно может устанавливать файлы cookie в разных браузерах - в конце концов, это всего лишь заголовок, и вы не видите неудачных сеансов в IE и Chrome на сайтах PHP, не так ли?

Я могу понять, почему IE не сохранит cookie с датой истечения срока действия.

Вы проверяли заголовки в этих браузерах?

0 голосов
/ 18 февраля 2011

Это может помочь вам.Может применяться ко всем IE.Я не проверял это сам.
http://php.net/manual/en/function.setcookie.php#100094

Вот часть со страницы:

Для тех, кто бьет головой о том, почему печеньеотсутствует при печати Internet Explorer 6, объяснение довольно интересное.После небольшого исследования файл cookie со временем истечения, отличным от 0, не может быть передан из IE6 на сервер при печати.Файл cookie со временем истечения 0 отправляется.

Следовательно:

setcookie ("TestCookie", $ value, time () + 3600);// не будет отправлено из Print / Print Preview в IE6

setcookie ("TestCookie", $ value, 0);// будет отправлено из Print / Print Preview в IE6

Я позволю всем понять, у кого блестящая идея не отправлять обычные файлы cookie с истекающим сроком при печати в IE6 ...

0 голосов
/ 18 февраля 2011

setcookie не зависит от браузера, куки устанавливаются с использованием заголовков протокола HTTP , что означает определенно кросс-браузер

Причина установкисбой может быть:

  • отправка первой части текста перед выполнением setcookie.Включите сообщения об ошибках, используя error_reporting(E_ALL);, чтобы увидеть строку, с которой начался вывод.Куки должны быть отправлены до того, как будет выполнена первая строка HTML или первая echo.
  • сохранение файлов php в кодировке UTF-8 с BOMСпецификация может быть отключена.Откройте файл в текстовом редакторе, измените кодировку и повторно сохраните его.Сначала создайте резервную копию
  • , используя setcookie с прошедшим временем.Третий параметр setcookie - время истечения .Менее чем time(), куки не будут сохранены
  • , указывая неправильные параметры для setcookie.Проверьте параметр cookie_name на наличие буквенно-цифровых символов.Не указывайте cookie_path и cookie_domain.

Решение также использует ob_start .Эта функция гарантирует успешную отправку всех заголовков.Прочтите руководство, чтобы узнать, как его использовать.

...