Что может привести к тому, что cookie не будет установлен в $ _COOKIE, когда он находится в $ _SERVER - PullRequest
4 голосов
/ 16 июля 2011

Я установил cookie очень хорошо, и cookie находится в заголовке запроса, но когда я получаю доступ к этому cookie в суперглобальном PHP $_COOKIE, он не устанавливается.Дамп $_COOKIE показывает остальные куки, кроме одного, и все они были в заголовке запроса.

Если я дам дамп $_SERVER, я вижу этот куки в $_SERVER['HTTP_COOKIE'].PHP устанавливает все файлы cookie в $_COOKIE, кроме одного.

Что может вызвать это и что за исправление?

Сервер работает под управлением PHP 5.3.3.

Обновление:Вверху моего index.php я var_dump($_SERVER);, а затем var_dump($_COOKIE); на следующей строке, и ожидаемый файл cookie не выводится из второго дампа.

Update2:

Вотчасть файла cookie моего запроса

Cookie:SESSe00cd0d8b79da0906c77d52ed6e26907=2f9fhsomr2skcfmivagb1i8gj7; __utma=172891446.852439441.1310775539.1310775539.1310775539.1; __utmc=172891446; __utmv=172891446.%3A; __utmb=172891446.4.10.1310780296; OATMEAL=%9Ey%EE%C9J%956%C0%06%B3%EBZ%83%D1%80%C0%AC%D2%D0T%86%9A%2A%2A%A2E%B7f%86%D7i%C1%28%19L%1Fl%920%3CE%10%B6%C9c%1D%E3%A7H%D9%E1%29%1C%7E5%C8q%CC3%21C%0C%DC%CC%A5%F3i%10%F7%DCJjF%EE%B9%80%3C%C6Jy%A2%0E%3F%E3%BD%7B%BF%CD%84%85%91%BB3%B9%EA%CB%92%89%AC%FBc%BA%A32s%B5L%3E%DF%9B%CDk%08%DEZ%13%5Da1Q%B0%1CJ%90%AE%AF%3F%15%98%1B%E1%C1g%A9%BBzR%F5Q%82%8F%81%1A%D1%0E%87%DC%F3%3B%FF%B7%8E%09%0F%BF%DFK%A3t%D1%F3%DA_%ECKt%01%00x%D2%CCE%24%BB0%C2w%B4%82%F0Q%00O%F1v%19%11%0A%3A%BB%9Fy%B1%BC9hgy%C4%DC%DEN%C4%A4%3B%7D%E8%84h%07%E3+%0B%85y%8B%B5y%1B%FC%CE%86B%F55%ED%E0%01%EB%18%13%B0%09%CA%F9%3D%26%05%FC%A7%F8%E4%CD%3C%9E%D7%24%B1%BF%27t%B4%3C%89%D76%F0%CF%C0%D4%E7Z%A6%02%19j%D7%60%28%82%DF%DF%9C%05%25%CB%CA%04%B9%21N%D2r%A76%DD%D1%CB%97%B0%A9%13%29%3C%D6kdm%D1%14%EA%D4%1Fz%F9%CF%21i%BD%19RN%C3%8Dh%27R%15%99%13%FAv%13%8F%BBd%7B%F5%AD%D5%22%13q%13Z%F219%B9%B0_%AB%16%7B%D2%18%E3%F0%F6%9D%A4X

Удаленный файл cookie называется «OATMEAL».

Обновление 3: эта ошибка в PHP похожа на https://bugs.php.net/bug.php?id=52018

Ответы [ 5 ]

3 голосов
/ 16 июля 2011

Длина вашей строки составляет 1099 символов.

Максимальная длина файла cookie составляет 4 КБ.

Предполагая, что символы UTF-8 с 4 байтами на символ вы должны иметь возможностьхранить между 1024.

Попробуйте сделать OATMEAL меньше.Намного меньше, и дайте нам знать, если это был виновник.

1 голос
/ 16 июля 2011

Не следует использовать значение в $_SERVER["HTTP_COOKIE"]. Это не задокументировано , поэтому, вероятно, оно ненадежно.

Это сообщение в комментариях к функции setcookie может ответить на ваш вопрос.

Обратите внимание, что переменная $ _COOKIE не будет содержать несколько файлов cookie с одним и тем же именем. ...

0 голосов
/ 10 января 2012

Спасибо всем, но в автономном режиме из этой темы другой разработчик предложил base64 кодировать данные cookie при отправке. Это сработало и сохранило данные, и я смог декодировать base64 на стороне сервера и продолжить.

0 голосов
/ 16 июля 2011

Как уже говорили другие, это почти наверняка связано с длиной вашей строки cookie. Вы должны сделать его короче.

Стоит также отметить, что даже если это работает, есть очень веская причина отсутствия такой длинной строки cookie - вся строка cookie отправляется в обоих направлениях для каждого отдельного HTTP-запроса, который вы делаете.

Допустим, у вас есть типичная страница, которая загружает двадцать изображений, два файла CSS и два файла Javascript, а также саму главную страницу HTML. Для такой строки cookie размером 1 КБ, как ваша, это будет означать дополнительные 50 КБ пропускной способности вашего сервера (и пропускной способности вашего пользователя) для каждой загрузки одной страницы. Это быстро сложится, если у вас будет достаточный объем трафика, и если у вас есть какие-либо ограничения или измерение вашей пропускной способности, это будет стоить вам дополнительных денег.

Во-вторых, я не знаю, что содержит этот OATMEAL cookie; У меня нет времени на его декодирование, но похоже, что вы запутываете данные (включая добавление некоторых преднамеренных символов спойлера). Имейте в виду, что если эти данные достаточно чувствительны, чтобы их можно было скрыть, то файл cookie является действительно плохим местом для хранения.

Если вам действительно нужно передать этот объем данных на сервер, вы должны отправить его в виде запроса POST. Если программе PHP требуется доступ к ней с последующей загрузкой страницы, установите ее в массиве $_SESSION. Если ваш код Javascript должен иметь возможность использовать его или установить его, используйте запрос Ajax.

0 голосов
/ 16 июля 2011

Может быть, вы не указали правильный путь для куки?Раньше у меня были проблемы с этим, когда он не давал мне доступ к cookie, потому что он автоматически устанавливал странный путь.Я должен был указать правильный путь, когда я установил cookie.

Вы, наверное, уже знаете это, но иногда вещи могут прятаться прямо у нас под носом.

http://us3.php.net/manual/en/function.setcookie.php

ура, Майкл

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