Example #1
0
 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;
 }