public static function analysis() { self::$_lifetime = config('session', 'lifetime'); self::$_short_lifetime = config('session', 'short_lifetime'); self::$_cache_sid = NULL; $session_id = NULL; //Клиенские куки пустые? if (empty($_COOKIE) or !isset($_COOKIE[self::SESSION_KEY])) { self::$_session_state = self::ST_NOT_SET; return FALSE; } //Данные в клиенских куках повреждены? $session_client = Format::converter($_COOKIE[self::SESSION_KEY], config('session', 'web_format'), TRUE); if (empty($session_client) or empty($session_client[self::COOKIE_ID])) { self::$_session_state = self::ST_INCORRECT; return FALSE; } $session_id = substr($session_client[self::COOKIE_ID], 0, 32); $session_server = db::row(self::Q_GET_SID, array('%sid' => $session_id), TRUE); //сессия есть в базе данных? if (empty($session_server)) { self::$_session_state = self::ST_INCORRECT; setcookie(self::SESSION_KEY, '', get_time() - 31500000); return FALSE; } $session_server['user_data'] = Format::converter($session_server['user_data'], config('settings', 'db_format'), TRUE); self::$_session_options = $session_server; self::$_session_client = $session_client; //Проверяем ip сессии и агент пользователя if (config(URL_AP, 'access', 'zone') != Z_PUBLIC and ($session_server['ip_address'] != ip2long(get_ip()) or $session_server['user_agent'] != trim(substr($_SERVER['HTTP_USER_AGENT'], 0, 120)))) { self::$_session_state = self::ST_INCORRECT; self::destroy($session_id); return FALSE; } //Проверяем время жизни сессии if (strtotime($session_server['life_time']) < get_time()) { self::$_session_state = self::ST_OUTDATED; self::destroy($session_id); return FALSE; } //Все проверки прошли успешно, сессия рабочая db::simple_query(self::Q_UPDATE_ACT, array('%sid' => $session_id, '%last_activity' => get_time())); self::$_cache_sid = $session_id; self::$_session_state = self::ST_LIFE; return TRUE; }