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(); }