Я испытываю странное поведение своего приложения в браузере 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 MYH: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 – уже отправленные заголовки». Как предлагает Bart S., включите error_reporting(E_ALL)
и попробуйте вывести возвращаемое значение setcookie, чтобы проверить это это не так.
Кроме того, попробуйте использовать setcookie
в базовом случае только с именем и значением и снова проверить заголовки ответов. Затем вырежьте весь свой код, за исключением setcookie, и если это сработает, принесите весь свой код обратно, используя divide and conquer 🙂
Один вопрос, одно предложение –
Вопрос: почему вы делаете число_формат (…) в time (), так как время () + 43200 должно быть достаточным.
Предложение. Посмотрели ли вы часы между клиентом и сервером. Поскольку у вас есть только 12-часовая разница между ними, если есть большой перекос или несогласие с тем, когда GMT находится между двумя машинами, вы можете обнаружить, что вы отправляете файл cookie, который должен истекать в самом ближайшее будущее.
Как вы обрабатываете свои файлы cookie, все в порядке, все в порядке, все в порядке, проблема, похоже, связана с Chrome.
Хотя проблема Chrome № 3014 в основном касается апплета Java, похоже, это то, что вы испытываете.
Я уже видел проблему, подобную этому. Я бы дважды проверял, правильный ли путь.
Я бы предположил, что www.domain.com
отличается от domain.com
, как и www.domain.com/
(с завершающим движением вперед-слэш)
Кроме того, убедитесь, что PHP имеет доступ для записи своих сеансов в файл с надлежащими разрешениями на запись (это другой каталог в зависимости от дистрибутива, но phpinfo()
должен указать вам, какой каталог он пытается использовать.)
Раньше я сталкивался с этим. Первый не дает ошибок и, похоже, имитирует то, что вы испытываете, второе дает ошибку доступа к файлу-записи, но если ошибки не отображаются, вы можете этого не заметить.
Используется ли ваше приложение из протокола http или файла: //?
Chrome не хранит файлы cookie с локальными приложениями, и это по дизайну. Вы можете изменить это поведение с помощью командной строки:
–enable-файл-куки