ddv88
@ddv88
Binance Futures

Варианты хранения id профилей в куках?

Для закладок не залогиненных пользователей храню id «профилей» в куках в виде обыкновенного массива в json и «закодированого» в base64.
$encode = base64_encode(json_encode([1,2,3,4,5]));
print $encode;
$decode = json_decode(base64_decode($encode), true);
print_r($decode);

Есть ли какие то более распространенные и удобные варианты хранения подобного рода кук?
Дабы не прогонять их через кучу фильтров перед использованием в запросе к бд.
Под удобством я предполагаю удаление и добавление значений в массив.
  • Вопрос задан
  • 149 просмотров
Пригласить эксперта
Ответы на вопрос 1
Wolfnsex
@Wolfnsex Куратор тега PHP
Если не хочешь быть первым - не вставай в очередь!
Есть ли какие то более распространенные и удобные варианты хранения подобного рода кук?
Мне кажется да, хранение в куках ID сессии пользователя в куках, а всей нужной информации - в БД, при этом ID-сессии будет какой-то единой строкой (состоящей из цифр, букв или чего-то ещё), которую достаточно прогнать через 1 фильтр, что бы избежать SQL-инъекций. А если Вы используете ORM, то они (ORM'ы) обычно умеют это делать самостоятельно (фильтровать данные, что бы избежать SQL-инъекций) и даже фильтры не нужны.

PHP имеет встроенный механизм сессий, в т.ч. с сохранение соотв. информации в куках, многие PHP-фреймворки так же имеют свои варианты реализации сессий.

Как уже отметил предыдущий автор ответа - размер кук ограничен, а base64, насколько я помню, увеличивает размер исходных данных на 1/3 (с "1/3" возможно я не совсем прав, не помню нюансов). Так же ограничено и количество кук на 1 домен.

Для удобства, сессии можно хранить, например в Redis'е, автоматически очищая информацию которой не пользовались N-времени.

Base64, как Вы заметили - это "кодирование", а не "шифрование".

Каждая кука передаётся с каждым HTTP-запросом, это не ускоряет загрузку сайта.

P.S. К хранению информации для незарегистрированных пользователей я бы отнёсся довольно осмотрительно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы