// Пробуем прочитать настройки для хэша $sess = Database::get_row('settings', array('data', 'lastchange'), 'cookie = ?', query::$cookie); // Проверяем полученные настройки if (isset($sess['data']) && isset($sess['lastchange'])) { // Настройки есть // Обновляем cookie еще на 2 мес у клиента, если она поставлена больше месяца назад if (intval($sess['lastchange']) < time() - 3600 * 24 * 30) { setcookie('settings', query::$cookie, time() + 3600 * 24 * 60, '/', $cookie_domain); // Фиксируем факт обновления в БД Database::update('settings', array('lastchange' => time()), 'cookie = ?', query::$cookie); } // Проверяем валидность настроек и исправляем, если что-то не так if (base64_decode($sess['data']) !== false && is_array(unserialize(base64_decode($sess['data'])))) { // Все ок, применяем сохраненные настройки $sets = array_replace_recursive($sets, unserialize(base64_decode($sess['data']))); $user = Database::get_row('user', 'login, email, rights', 'cookie = ?', query::$cookie); if (!empty($user)) { $sets['user'] = array_replace($sets['user'], $user); } sets::import($sets); } else { // Заполняем поле настройками 'по-умолчанию' (YTowOnt9 разворачивается в пустой массив) Database::update('settings', array('data' => 'YTowOnt9'), 'cookie = ?', query::$cookie); } } else { // Настроек нет, создаем их setcookie('settings', query::$cookie, time() + 3600 * 24 * 60, '/', $cookie_domain); // Вносим в БД сессию с дефолтными настройками Database::insert('settings', array('cookie' => query::$cookie, 'data' => 'YTowOnt9', 'lastchange' => time())); } }