Пример #1
0
 function Logout()
 {
     $this->UpdateHistory(0);
     $this->SaveSession();
     if (!($row = $this->db->Query_Fetch_Assoc("SELECT uid, INET_NTOA(ip) as ip, sessid " . "FROM users_online " . "WHERE id=" . $_SESSION[S_ID]["online_table_id"] . " " . "LIMIT 0,1"))) {
         LogWrite(USERS_LOG, "ненайдена сессия для " . $this->login . ", в подключенных пользователях");
         return;
     }
     if ($row["uid"] != $this->id) {
         LogWrite(USERS_LOG, "для пользователя " . $this->login . " в сессии " . $_REQUEST["PHPSESSID"] . " не совпадает id пользователя (" . $row["uid"] . ")");
     }
     if ($row["ip"] != $_SESSION[S_ID]["ip_login"]) {
         LogWrite(USERS_LOG, "для пользователя " . $this->login . " в сессии " . $_REQUEST["PHPSESSID"] . " не совпадает ip (" . $_SESSION[S_ID]["ip_login"] . " - " . $row["ip_login"] . ")");
     }
     if ($row["sessid"] != $_REQUEST["PHPSESSID"]) {
         LogWrite(USERS_LOG, "для пользователя " . $this->login . " не совпадают сессии " . $_REQUEST["PHPSESSID"] . " и " . $row["sessid"]);
     }
     $this->db->Query("DELETE FROM users_online WHERE id=" . $_SESSION[S_ID]["online_table_id"]);
     $user = new System_User($this->db);
     // проверяем есть ли в списке залогиненых этот же пользователь? если есть, и последняя активность более 24 часов, то удаляем запись
     if (!($result = $this->db->Query_Fetch("SELECT id, uid, TIMEDIFF(NOW(), time_last_active)+0 as time, inet_ntoa(ip) as ip, time_login, time_last_active " . "FROM users_online "))) {
         return;
     }
     // чистим таблицу с давно законнекчиными
     foreach ($result as $row) {
         if ($row["time"] < SESSION_HOURS) {
             continue;
         }
         $this->db->Query("INSERT INTO users_connection_history (uid, ip, time_active, state) " . "VALUES ('" . $row["uid"] . "', inet_aton('" . $row["ip"] . "'), '" . $row["time_last_active"] . "', 0)");
         $this->db->Query("DELETE FROM users_online WHERE id=" . $row["id"]);
         $user->Reset($row["uid"]);
         LogWrite(USERS_LOG, "из залогиненых пользователей была удалена старая запись пользователя " . $user->login . ", " . "от " . $row["time_login"] . " (IP: " . $row["ip"] . ")");
     }
     // чистим старые кешы
     ClearCache();
 }