В последнее время я наткнулся на некоторые статьи, в которых предлагается использовать файл cookie для хранения данных сеанса. Мне понравилась эта идея и расширилось мое хранилище сеансов, добавив класс CookieStorage, который отлично работает (обратите внимание, что для каждого пользователя я использую уникальный хеш-ключ для шифрования и шифрования данных). Однако есть много других статей, которые предлагают не хранить конфиденциальные данные в cookie, даже если вы шифруете и подписываете значение.
Лично я не нахожу причин, почему бы не делать это особенно при шифровании и подписи значения с помощью другого ключа для каждого пользователя. Риск скомпрометирования данных такой же, как и при обычных сеансах, нет? Не говоря уже о том, что если вы используете SSL, риск для угона будет ликвидирован.
То, что я вижу в качестве преимущества при таком подходе, если данные сеанса невелики, меньше операций ввода-вывода на сервере для открытия / чтения / записи данных сеанса, независимо от того, является ли хранилище файлом, db, основано на памяти
Буду признателен за ваши отзывы по этому вопросу
благодаря
Если вы используете чисто хранилище cookie без какого-либо компонента на стороне сервера, тогда пользователь контролирует данные. Единственное, что удерживает его от этого, – это ваш метод шифрования / подписи; но это может быть атаковано. Если вы не используете ключи шифрования / подписи, специфичные для сеанса пользователя (т. Е. Вы не используете сеанс на стороне сервера), то вы в значительной степени ограничены статическим секретом. Кто-то может атаковать это в автономном режиме, пытаясь переборщить его. Как только они это сделали, они смогли обмануть всю свою сессию.
Если вы используете более безопасные одноразовые случайные секреты, хранящиеся в сеансе на стороне сервера … вы уже храните данные на серверной сессии! Почему бы не сохранить его простым и сохранить там все? Это также уменьшит потребность в пропускной способности, необходимую для передачи всех файлов cookie взад и вперед с каждым отдельным запросом.
Если вы делаете это главным образом для сохранения операций ввода-вывода на сервере: используйте более эффективное хранилище сеансов, такое как хранилище на основе memcache.