Как можно создать или создать файл cookie?

Когда пользователи регистрируются на нашем сайте, мы извлекаем объект из нашей базы данных, который содержит различные параметры, которые используются на всем сайте. Чтобы уменьшить нагрузку на сервер от возврата к нашей базе данных каждый раз, когда пользователь взаимодействует с нашим сайтом, мы пытаемся придумать альтернативные способы. (Мы сериализуем и де-сериализуем объект, когда это необходимо). Объект, вероятно, будет < 1MB, но может меняться.

  • Насколько большой объект может быть у нас в сеансе без существенного влияния на производительность?
  • Как большой объект можно сохранить в cookie?
  • Есть ли другие альтернативы (другие, чем, извлечение данных из нашей БД)?

Ответ 1

Максимально допустимый размер файла cookie зависит от клиента. Например, в статье MSDN от 2005 года говорится, что весь файл cookie может иметь как минимум 4096 байт (включая дату истечения срока действия и т.д.). RFC, упомянутый в той же статье, содержит дополнительную информацию об ограничениях:

6.3 Пределы реализации

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

  • не менее 300 файлов cookie

  • не менее 4096 байт на файл cookie (как измеряется размером     символы, которые содержат нетерминал cookie в синтаксисе     описание заголовка Set-Cookie)

  • не менее 20 файлов cookie на уникальный хост или доменное имя

Если ваши данные сеанса не являются ценными (как в случае "не должны быть потеряны в случае, например, перезагрузки" ), рассмотрите возможность его хранения в memcached. Это довольно быстро и позволяет получить доступ к БД только для получения данных сеанса. Вы действительно можете рассмотреть возможность использования сочетания обоих: вы можете создать небольшой файл cookie, содержащий идентификатор сеанса и информацию для входа. Тогда потеря ваших сеансов на стороне сервера не приведет к выходу пользователей из системы, поэтому воздействие будет довольно низким.

Ответ 2

Альтернативой cookie является локальное хранилище html5. Он не поддерживается старыми браузерами, но если это не имеет для вас значения, это хороший вариант для пользовательских настроек. Имейте в виду следующее:

1) Предел по умолчанию - 5 МБ на домен (я думаю)
2) Если вы сохраняете данные типа настроек в локальном хранилище, вам все равно нужно синхронизировать с сервером, иначе смена браузеров приведет к тому, что пользовательские настройки не будут присутствовать в новом браузере.

Ответ 3

Данные cookie ограничены 4kb.

4 КБ на максимум файла cookie 300 общих файлов cookie, максимум 1,2 Мбайт 20 файлов cookie, принятых с определенного сервера или домена

Каждый файл cookie начинается с пары имя-значение. За этой парой следуют ноль или более пары пар атрибутов, которые разделяются точкой с запятой. Для одного имени домена каждый файл cookie ограничен 4096 байт. Эта сумма может существовать как одна пара значений имени-4 килобайт (КБ) или как до 20 пар имя-значение, которые составляют 4 КБ. Если на компьютере недостаточно места для хранения файла cookie, cookie отбрасывается. Он не усечен. Приложения должны использовать как можно меньше файлов cookie и как можно меньше файлов cookie. Кроме того, приложения должны иметь возможность обрабатывать потерю файла cookie.

Если веб-приложение использует более 19 пользовательских файлов cookie, состояние сеанса ASP может быть потеряно. Internet Explorer 4.0 и более поздние версии позволяют в общей сложности 20 файлов cookie для каждого домена. Поскольку ASPSessionID является файлом cookie, если вы используете 20 или более пользовательских куки файлов, браузер вынужден отменить файл cookie ASPSessionID и потерять сеанс.