PHP cookie проблема, работает в Firefox не в другом браузере - PullRequest
5 голосов
/ 31 июля 2009

У меня проблема с настройкой файлов cookie в php. Должен сказать, что я не очень разбираюсь в php, так что, возможно, это очень глупая проблема.

У меня есть система рейтинга ajax, которая должна проверять куки-файл, чтобы узнать, проголосовала ли фотография.

Страница, вызванная проверкой cookie на ajax, добавьте идентификатор фотографии, за которую вы голосуете, и вызовите эту функцию:

   setcookie("Name", $cookie, time()+(60*24*365), "/",  $_SERVER['HTTP_HOST'], 0); 

Страница, на которой отображается фотография, также называется cookie

   $cookie = $_COOKIE['Name'];

и проверьте, проголосовали ли вы уже.

Проблема может заключаться в том, что страница ajax находится в другом каталоге, чем страница, на которой отображается фотография.

Страница, которая отображает фотографию, находится в корневом каталоге, страница, которая проголосовала, находится в /ajax/vote.php

.

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

Он работает в Firefox без каких-либо проблем, но когда я начал тестирование в IE и Safari, кажется, что они не видят cookie.

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

Извините за плохой английский, надеюсь, проблема понятна

P.S. Забыл указать на то, что может быть связано с проблемой. Страница находится внутри фрейма.

Ответы [ 5 ]

11 голосов
/ 31 июля 2009

Проверьте настройки файлов cookie других браузеров, и если они настроены на блокировку всех или пусто при выходе.

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

Иногда может показаться, что вы можете создать cookie, но затем он исчезнет или будет удален при каждой перезагрузке страницы.

Печенье из фрейма

Также возможно, что поскольку вы устанавливаете файлы cookie в iframe, браузеры могут просматривать их как сторонние файлы cookie и отклонять их, если в настройках браузера явно не указано разрешать сторонние файлы cookie .

В этом случае вам потребуется компактная политика конфиденциальности (или компактный заголовок P3P ) на страницах, с которых вы пытаетесь установить файлы cookie.

Для PHP вы добавили бы это в качестве заголовка для страницы, на которой установлен cookie:

header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'); 
0 голосов
/ 30 сентября 2009

проблема в файлах cookie, т.е. SOLUCIONADO: проблема в куки для т.е. решена:

Es ПРОСТО, Cuando объявлен cookie и описан в EXPIRE: time () + 60 * 60 * 24 * 30, cambien los 60's por 120 asi: время () + 120 * 120 * 24 * 30. A me'i me funcion'o a la perfeccion.

Это просто, когда вы объявляете cookie, по истечении времени "time () + 60 * 60 * 24 * 30", измените los 60 на 120 так: time () + 120 * 120 * 24 * 30. У меня это сработало.

0 голосов
/ 31 июля 2009

Вы устанавливаете cookie на тот же URL? Если вы используете $_SERVER['HTTP_HOST'], то один браузер может установить его на http://example.com, в то время как другой может установить его на http://www.example.com..

Цитировать PHP документы :

Домен, в котором доступен файл cookie. Чтобы файл cookie был доступен во всех поддоменах сайта example.com, установите для него значение «.example.com». . не требуется, но делает его совместимым с большим количеством браузеров. Установка этого параметра на www.example.com сделает куки доступными только в поддомене www.

Поэтому попробуйте установить домен .yoursite.com в качестве домена.

Другие вещи, которые стоит попробовать:

  • $ name является единственным обязательным параметром в функции setcookie - попробуйте пропустить все после $ expire и посмотрите, работает ли он.
  • Попробуйте установить значение $ expire далеко в будущее. Может быть, что-то на вашем компьютере или сервере вызывает проблему со временем?
  • Вы проверили в своем браузере, определенно ли установлен cookie? Там должен быть способ перечислить каждый набор файлов cookie. Установите cookie и проверьте ваш браузер.
0 голосов
/ 31 июля 2009

IFRAME является причиной потери ваших файлов cookie. Ваш файл cookie идентификатора сеанса PHP также теряется, и при каждом запросе создается новый сеанс, поэтому теряется отслеживание предыдущего состояния.

Несмотря на то, что заголовки P3P могут помочь, клиентские браузеры все еще могут быть настроены на запрет сторонних файлов cookie, а P3P не может их переопределить. Стив Гибсон из Security Now! Подкаст Fame неоднократно рекомендует включить блокировку сторонних куки, потому что он останавливает такие вещи, как отслеживание куки.

Что вам нужно сделать, это переключиться на идентификатор сеанса на основе формы. PHP делает это легко, предоставляя переменную формы «PHPSESSID» в строке запроса или скрытой переменной формы ввода со значением session_id(). Или, если вы хотите быть переносимым, проверьте значение ini_get('session.name'), если на веб-сервере задано имя переменной пользовательского сеанса, отличное от «PHPSESSID».

0 голосов
/ 31 июля 2009

В прошлом у меня была похожая проблема, когда куки устанавливались Firefox, но не IE, если я работал с сервером локальной сети (192.168.0.102 или что-то в этом роде), но когда я перенес все это на На публичном сервере с доменным именем все работало нормально.

В IE могут быть какие-то странные правила относительно файлов cookie и доменных имен. Не уверен, поможет ли это в вашем случае.

...