Main > PHP > PHP и Cookie

PHP и Cookie

14.02.2012 0 comments » Views: 2,244

Cookies

При работе с куками, а именно хранение в них довольно объемных массивов, столкнулся с рядом проблем..

Проблема 1 - Сохранение массива в куки. Решение:

Запись в куки

Чтение из кук

Проблема 2 - Хранение больших объемов данных.

После некторого времени работы с ними столкнулся с такой проблеммой: добавляю очередной элемент в куки, перезагружаю страницу, он или пропадает или записывается на место последнего элемента. Полез искать инфу, как я и полагал, нормальные броузеры ограничивает файл куки для страницы ( а может и домена, не проверял ) в 4 кб. Это согласно RFC. Microsoft как всегда отличается

Internet Explorer will ignore any Set-Cookie header if the header value's length exceeds 5118 bytes

у них размер чуть больше

Также нашел такую информацию:

Клиент (браузер) имеет следующие ограничения для cookies:

* всего может храниться до 300 значений cookies
* каждый cookie не может превышать 4Кбайт
* с одного сервера или домена может храниться до 20 значений cookie

Если ограничение 300 или 20 превышается, то удаляется первая по времени запись. При превышении лимита объема в 4Кбайт корректность значения cookie страдает — отрезается кусок записи (с начала этой записи) равный превышению объема.

В случае кэширования документов, например, proxy-сервером, поле Set-cookie HTTP заголовка никогда не кэшируется.

Если proxy-сервер принимает ответ, содержащий поле Set-cookie в заголовке, предполагается, что поле доходит до клиента вне зависимости от кода возврата 304 (Not Modified) или 200 (OK). Соответственно, если клиентский запрос содержит в заголовке Cookie, то он должен дойти до сервера, даже если жестко установлен параметр If-modified-since.

На гугл ответах нашел даже такое (сам не проверял):

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

Отсюда следует, что если Вам необходимо хранить большой объем данных, больше 4 кб, а делать авторизацию не имеет смысла, то возможно подойдет такой вариант:

1. Создаём файл с случайным набором букв afsd876f0adf08970asf.cache
2. Записываем в него serialize массив
3. Храним в куках имя файла

Author: | Rating: 4/5 | Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *

Allowed HTML-tags: <a>, <code>, <i>, <em>, <strong>, <b>, <u>, <strike>