Сохранение сессионных переменных в базе данных MySQL

При разработке Ростовского магазина компьютерной техники, я столкнулся с необходимостью сделать возможность сохранять настройки пользователей. Причём я хотел сделать возможность сохранять настройки как авторизованных пользователей, так и тех, кто зашел на сайт и не зарегистрировался.

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

Т.к. в массиве сессионных переменных может быть много временных переменных, не имеющих отношения к настроке, то я добавил проверку и переброску во временный массив всех переменных, начинающихся с 'us_'.

Этот код отвечает за сохранение переменных текущей сесии в базе данных:

$ar=[];
foreach($_SESSION as $key => $value) if(substr($key,0,3)=='us_')$ar[$key]=$value;
if(isset($_SESSION['u_id'])){// если авторизованный пользователь
  sql('UPDATE '.db_prefix.'user SET param="'.addslashes(serialize($ar)).'" WHERE id="'.$_SESSION['u_id'].'"');}
else // если пользователь неавторизован поставлю ему куку с параметрами настроки
  @setcookie("param", urlencode(serialize($ar)), time()+60*60*24*30, "/");

Этот код устанавливает переменные сессии после ввода логина/пароля

// ищу пользователя в базе данных и заполняю массив $data
$ar=unserialize($data['param']); // устанавливает настроки в переменные сессии
foreach($ar as $key => $value) if(substr($key,0,3)=='us_')$_SESSION[$key]=$value;

Этот код устанавливает переменные сессии, если есть кука и пользователь неавторизован

if (isset($_COOKIE['param'])){
   $ar=unserialize(urldecode($_COOKIE['param'])); // устанавливает настроки в переменные сессии
   foreach($ar as $key => $value) if(substr($key,0,3)=='us_')$_SESSION[$key]=$value;

В этом блоке кода есть небольшая уязвимость. Надеюсь, Вы догадаетесь, как её "залатать".


.