Браузер: печенье потеряно при обновлении - PullRequest
8 голосов
/ 29 марта 2010

Я испытываю странное поведение моего приложения в браузере Chrome (нет проблем с другими браузерами).Когда я обновляю страницу, 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?Спасибо за любые предложения.

EDIT-01:

Кажется, что cookie не отправляется с некоторыми запросами.Это происходит периодически, и я наблюдаю такое поведение для ALL браузеров.Кто-нибудь сталкивался с такой ситуацией?Есть ли ситуации, когда куки не будут отправлены с запросом?

EDIT-02:

Вот 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

Еще раз спасибо, для любого руководства.

Ответы [ 5 ]

4 голосов
/ 31 марта 2010

Один вопрос, одно предложение -

Вопрос - почему вы делаете number_format (...) для time (), так как time () + 43200 должно быть достаточно.

Предложение - Вы смотрели на часы между клиентом и сервером. Поскольку вы даете разницу между ними только в 12 часов, если между двумя компьютерами существует большой перекос часов или разногласия относительно времени по Гринвичу, вы можете обнаружить, что отправляете cookie, срок действия которого истекает в самом ближайшее будущее.

3 голосов
/ 06 апреля 2010

Единственное, о чем я могу подумать, увидев информацию о вашем заголовке, это то, что PHP выводит что-то до того, как вы установите cookie. Если это так, setcookie должен вернуть false, и вы получите предупреждение «Не удается отправить сеанс Cookie - заголовки уже отправлены». Как предполагает Барт С., включите error_reporting(E_ALL) и попробуйте вывести возвращаемое значение setcookie, чтобы убедиться, что это не так. это не так.

Также попробуйте просто использовать setcookie в базовом случае, указав только имя и значение, и снова проверьте заголовки ответа. Затем вырежьте весь ваш код, за исключением setcookie, и, если это сработает, верните весь свой код обратно, используя разделяй и властвуй:)

1 голос
/ 03 апреля 2010

Ваше приложение обслуживается по протоколу http или из файла: //?

Chrome не хранит файлы cookie с локальными приложениями, и это специально. Вы можете изменить это поведение с помощью переключателя командной строки:

- Enable-файл-печенье

1 голос
/ 02 апреля 2010

Я видел проблему, похожую на это раньше. Я бы еще раз проверил правильность пути.

Я бы предположил, что www.domain.com отличается от domain.com, как и www.domain.com/ (с конечной косой чертой)

Кроме того, проверьте, что PHP имеет доступ для записи своих сеансов в файл с надлежащими разрешениями на запись (это другой каталог в зависимости от дистрибутива, но phpinfo() должен указать, какой каталог он пытается использовать.)

Я сталкивался с обоими из них раньше. Первый из них не дает ошибок и, похоже, имитирует то, что вы испытываете, второй дает какую-то ошибку доступа к записи в файл, но если ошибки не отображаются, вы можете этого не увидеть.

1 голос
/ 29 марта 2010

То, как вы обрабатываете свои куки, совершенно нормально, в вашем коде все выглядит нормально, проблема, похоже, связана с Chrome.

Хотя Chrome Issue # 3014 имеет дело главным образом с Java-апплетом, кажется, это то, что вы испытываете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...