[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Избранное на куках
Dimadima965
Всем доброго времени суток. Реализую механизм добавления в избранное в одном катологе - алгоритм такой:
JS добавляет куку "i" с id товаров через запятую (25,35,56....).
При переходе на страницу просмотра избранного обрабатываю куку PHP так:

$sd = array("25"=>"Инфа о товаре","35"=>"инфа о товаре".....)//Массив продуктов где ключ это id
$ar = explode(",",$_COOCIE['i']);
foreach($ar as $v){
if(is_numeric($v)&&in_array($v,array_flip($sd))){
$new[] = $v;//Формируется новый массив с которым потом еще работаю.
}
}


Вопрос:
Стоит ли шифровать куку, если ид товара известен и в свободном доступе. Можно ли при такой обработке подсунуть бяку серваку? Безопасна ли такая реализация добавления в избранное именно с точки зрения php?
kaww
Цитата (Dimadima965 @ 21.03.2018 - 12:34)
добавляет куку "i" с id товаров через запятую

И будут болтаться эти куки в каждом запросе, делая его тяжелее, хотя нужны только
Цитата (Dimadima965 @ 21.03.2018 - 12:34)
При переходе на страницу просмотра избранного

Если есть сессии, то можно хранить там, либо еще где-то (в БД), если требуется.
Но, наверное, БД никакой нет т.к. есть Массив продуктов где ключ это id. Или этот массив из БД? В таком случае стоит задуматься, как поведет себя система если товаров станет значительное число.
Зачем это все:
if(is_numeric($v)&&in_array($v,array_flip($sd))){

Почему не просто:
if(isset($sd[$v]))
Dimadima965
kaww
Да естественно сначала все ID берутся из бд.
Про значительное число ты прав, как выход можно сначала тогда достать все id из базы:
$data = $pdo->query('SELECT name FROM table')->fetchAll(PDO::FETCH_COLUMN);

проверить на
 if(isset($sd[$v]))
;
И достать теперь уже только:

$data = $pdo->query('SELECT * FROM table WHERE ID IN(implode(...))')->fetchAll(PDO::FETCH_UNIQUE);


Что думаешь?
kaww
Цитата (Dimadima965 @ 21.03.2018 - 14:40)
тогда достать все id из базы

Так тоже делать не стоит. Достаточно where ID in ($ids), где $ids - $_COOCIE['i'], предварительно проверенный на размер и отфильтрованный на недопустимые символы:
implode(',', array_filter(explode(',', $str), 'is_numeric'));
Эли4ка
Не используй куки для такого.
Kusss
а если хранить в supports_html5_storage ?
Dimadima965
Эли4ка
А что использовать??? Юзер не авторизирован, не зарегистрирован, кончится сессия или он заедет снова, все потеряется!!
Dimadima965
Kusss
Интересная мысль, надо изучить вопрос!
Dimadima965
kaww
Ну да я так и имел ввиду, только вопрос а зачем на размер проверять? Можно просто каждый:
if(isset($sd[$v])
.
Dimadima965
Можно еще функцию запилить:
function chekcooc($cooc){
$result = preg_replace("/,/", '',$_COOKIE[$cooc]);
if(is_numeric($result)){
return true;
}
}

И ей проверять всю куку.
Что скажете?
Эли4ка
Цитата
А что использовать??? Юзер не авторизирован, не зарегистрирован, кончится сессия или он заедет снова, все потеряется!!

А он их так потереть не может?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.