Beispiel #1
0
    // Пробуем прочитать настройки для хэша
    $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()));
    }
}