Я испытываю странное поведение своего приложения в браузере Chrome (Никакая проблема с другими браузерами). Когда я обновляю страницу, cookie отправляется правильно, но периодически браузер, кажется, не передает cookie некоторым обновлениям.
Это - то, как я установил свой cookie:
$identifier = / some weird string /;
$key = md5(uniqid(rand(), true));
$timeout = number_format(time(), 0, '.', '') + 43200;
setcookie('fboxauth', $identifier . ":" . $key, $timeout, "/", "fbox.mysite.com", 0);
Это - то, что я использую для верхних колонтитулов страницы:
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Thu, 25 Nov 1982 08:24:00 GMT"); // Date in the past
Вы видите какую-либо проблему здесь, которая могла бы влиять на обработку cookie? Спасибо за любое предложение.
Кажется, что cookie не отправляется с некоторыми запросами. Это происходит периодически, и я вижу это поведение для ВСЕХ браузеров теперь. Кто-либо столкнулся с такой ситуацией? Есть ли какая-либо ситуация, куда cookie не будет отправлен с запросом?
Вот HTTP-заголовки:
Request Method:GET Status Code:200 OK
ЗАГОЛОВКИ ЗАПРОСА
Accept:application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5 Referer:http://fbox.mysite.com/dashboard User-Agent:Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.1.249.1045 Safari/532.5
ЗАГОЛОВКИ ОТВЕТА
Cache-Control:no-cache, must-revalidate Content-Length:8903 Content-Type:text/html Date:Tue, 06 Apr 2010 09:25:26 GMT Expires:Thu, 25 Nov 1982 08:24:00 GMT Last-Modified:Tue, 06 Apr 2010 09:25:26 GMT Pragma:no-cache Server:Microsoft-IIS/7.5 X-Powered-By:PHP/5.3.1 ZendServer
Еще раз спасибо, для любой инструкции.
Единственное, о чем я могу думать, увидев информацию из вашего заголовка, - это то, что PHP выводит что-то до того, как вы установите cookie. В этом случае setcookie должен вернуть false, и вы получите предупреждение «Не удается отправить файл cookie сеанса - заголовки уже отправлены», - сказал Барт С.предлагает, включите error_reporting (E_ALL)
и попробуйте вывести возвращаемое значение setcookie, чтобы убедиться, что это не так.
Также попробуйте просто использовать setcookie
в базовом случае только с именем и значением и снова проверьте заголовки ответов. Затем вырежьте весь свой код, кроме setcookie, и, если это сработает, верните весь свой код с помощью метода «разделяй и властвуй» :)
Ваше приложение обслуживается по протоколу http или file: //?
Chrome не хранит файлы cookie с локальными приложениями, и это сделано специально. Вы можете изменить это поведение с помощью переключателя командной строки:
- enable-file-cookies
Один вопрос, одно предложение -
Вопрос - почему вы делаете number_format (...) на time (), поскольку time () + 43200 должно быть достаточно.
Предложение - Вы смотрели на часы между клиентом и сервером? Поскольку вы даете разницу между двумя машинами только на 12 часов, если есть большой разброс часов или разногласия по поводу времени по Гринвичу между двумя машинами, вы можете обнаружить, что отправляете cookie, срок действия которого истекает в самое ближайшее время. ближайшее будущее.
То, как вы обрабатываете файлы cookie, совершенно нормально, в вашем коде все в порядке, проблема, похоже, связана с Chrome.
Хотя Проблема Chrome № 3014 связана в основном с Java-апплетом, похоже, именно это вы и испытываете.
Я видел подобную проблему раньше. Я бы перепроверил, правильный ли путь.
Я бы предположил, что www.domain.com
отличается от domain.com
, как и www.domain.com/
(с завершающим вперед -slash)
Кроме того, убедитесь, что PHP имеет доступ для записи сеансов в файл с соответствующими разрешениями на запись (это другой каталог в зависимости от дистрибутива, но phpinfo ()
должен сообщить вам, какой это каталог. пытаюсь использовать.)
Я уже сталкивался с обоими из них раньше. Первый не выдает ошибок и, похоже, имитирует то, что вы испытываете, второй дает какую-то ошибку доступа к записи в файл, но если ошибки не отображаются, вы можете этого не увидеть.