function logout($o_id, $u_id, $info = "") { // Logout aus dem Gesamtsystem global $dbase, $u_farbe, $conn, $communityfeatures, $logout_logging; if ($logout_logging) { logout_debug($o_id, $info); } // Tabellen online+user exklusiv locken $query = "LOCK TABLES online WRITE, user WRITE"; $result = mysql_query($query, $conn); $o_id = mysql_real_escape_string($o_id); // sec // Aktuelle Punkte auf Punkte in Usertabelle addieren $result = @mysql_query("select o_punkte,o_name,o_knebel, UNIX_TIMESTAMP(o_knebel)-UNIX_TIMESTAMP(NOW()) as knebelrest FROM online WHERE o_id={$o_id}", $conn); if ($result && mysql_num_rows($result) == 1) { $row = mysql_fetch_object($result); $u_name = $row->o_name; if ($row->knebelrest > 0) { $knebelzeit = $row->o_knebel; } else { $knebelzeit = NULL; } $query = "update user set " . "u_punkte_monat=u_punkte_monat+{$row->o_punkte}, " . "u_punkte_jahr=u_punkte_jahr+{$row->o_punkte}, " . "u_punkte_gesamt=u_punkte_gesamt+{$row->o_punkte}, " . "u_knebel='{$knebelzeit}' " . "where u_id={$u_id}"; $result2 = mysql_query($query, $conn); } @mysql_free_result($result); // User löschen $result2 = mysql_query("DELETE FROM online WHERE o_id={$o_id} OR o_user={$u_id}", $conn); // Lock freigeben $query = "UNLOCK TABLES"; $result = mysql_query($query, $conn); // Punkterepair $repair1 = "UPDATE user SET u_punkte_jahr = 0, u_punkte_monat = 0, u_punkte_datum_jahr = YEAR(NOW()), u_punkte_datum_monat = MONTH(NOW()), u_login=u_login WHERE u_punkte_datum_jahr != YEAR(NOW()) AND u_id={$u_id}"; mysql_query($repair1); $repair2 = "UPDATE user SET u_punkte_monat = 0, u_punkte_datum_monat = MONTH(NOW()), u_login=u_login WHERE u_punkte_datum_monat != MONTH(NOW()) AND u_id={$u_id}"; mysql_query($repair2); // Nachrichten an Freunde verschicken if ($communityfeatures) { $query = "SELECT f_id,f_text,f_userid,f_freundid,f_zeit FROM freunde WHERE f_userid={$u_id} AND f_status = 'bestaetigt' " . "UNION " . "SELECT f_id,f_text,f_userid,f_freundid,f_zeit FROM freunde WHERE f_freundid={$u_id} AND f_status = 'bestaetigt' " . "ORDER BY f_zeit desc "; $result = mysql_query($query, $conn); if ($result && mysql_num_rows($result) > 0) { while ($row = mysql_fetch_object($result)) { unset($f); $f['aktion'] = "Logout"; $f['f_text'] = $row->f_text; if ($row->f_userid == $u_id) { if (ist_online($row->f_freundid)) { $wann = "Sofort/Online"; $an_u_id = $row->f_freundid; } else { $wann = "Sofort/Offline"; $an_u_id = $row->f_freundid; } } else { if (ist_online($row->f_userid)) { $wann = "Sofort/Online"; $an_u_id = $row->f_userid; } else { $wann = "Sofort/Offline"; $an_u_id = $row->f_userid; } } // Aktion ausführen aktion($wann, $an_u_id, $u_name, "", "Freunde", $f); } } @mysql_free_result($result); } }
function login($u_id, $u_name, $u_level, $hash_id, $javascript, $ip_historie, $u_agb, $u_punkte_monat, $u_punkte_jahr, $u_punkte_datum_monat, $u_punkte_datum_jahr, $u_punkte_gesamt) { // In das System einloggen // $o_id wird zurückgeliefert // u_id=User-ID, u_name ist Nickname, u_level ist Level, hash_id ist Session-ID // javascript=JS WAHR/FALSCH, ip_historie ist Array mit IPs alter Logins, u_agb ist AGB gelesen Y/N global $dbase, $conn, $http_host, $HTTP_SERVER_VARS, $punkte_gruppe, $communityfeatures, $logout_logging; // IP/Browser Adresse des User setzen $ip = $_SERVER["REMOTE_ADDR"]; $browser = $_SERVER["HTTP_USER_AGENT"]; $browser = str_replace("MSIE 8.0", "MSIE 7.0", $browser); // Alle wichtigen HTTP-Header merken $http_stuff = $_SERVER; // ausblenden vom uninteressanten Sachen... unset($http_stuff['DOCUMENT_ROOT']); unset($http_stuff['HTTP_ACCEPT']); unset($http_stuff['HTTP_ACCEPT_ENCODING']); unset($http_stuff['HTTP_ACCEPT_CHARSET']); unset($http_stuff['HTTP_ACCEPT_LANGUAGE']); unset($http_stuff['HTTP_CACHE_CONTROL']); unset($http_stuff['HTTP_CONNECTION']); unset($http_stuff['HTTP_PRAGMA']); unset($http_stuff['PATH']); unset($http_stuff['SCRIPT_FILENAME']); unset($http_stuff['SERVER_ADMIN']); unset($http_stuff['SERVER_NAME']); unset($http_stuff['SERVER_PORT']); unset($http_stuff['SERVER_SIGNATURE']); unset($http_stuff['SERVER_SOFTWARE']); unset($http_stuff['GATEWAY_INTERFACE']); unset($http_stuff['SERVER_PROTOCOL']); unset($http_stuff['REQUEST_METHOD']); unset($http_stuff['REQUEST_URI']); unset($http_stuff['SCRIPT_NAME']); unset($http_stuff['PATH_TRANSLATED']); unset($http_stuff['PHP_SELF']); unset($http_stuff['SERVER_ADDR']); unset($http_stuff['argv']); unset($http_stuff['argc']); unset($http_stuff['CONTENT_TYPE']); unset($http_stuff['CONTENT_LENGTH']); unset($http_stuff['HTTP_REFERER']); unset($http_stuff['HTTP_KEEP_ALIVE']); unset($http_stuff['QUERY_STRING']); unset($http_stuff['REMOTE_PORT']); unset($http_stuff['PHP_AUTH_PW']); // Aktionen initialisieren, nicht für Gäste if ($u_level != "G" && $communityfeatures) { $query = "select a_id FROM aktion WHERE a_user={$u_id} "; $result = mysql_query($query, $conn); if ($result && (mysql_num_rows($result) == 0 || mysql_num_rows($result) > 20)) { mysql_query("INSERT INTO aktion set a_user={$u_id}, a_text='" . mysql_real_escape_string($u_name) . "', a_wann='Sofort/Online', a_was='Freunde', a_wie='OLM'", $conn); mysql_query("INSERT INTO aktion set a_user={$u_id}, a_text='" . mysql_real_escape_string($u_name) . "', a_wann='Login', a_was='Freunde', a_wie='OLM'", $conn); mysql_query("INSERT INTO aktion set a_user={$u_id}, a_text='" . mysql_real_escape_string($u_name) . "', a_wann='Sofort/Online', a_was='Neue Mail', a_wie='OLM'", $conn); mysql_query("INSERT INTO aktion set a_user={$u_id}, a_text='" . mysql_real_escape_string($u_name) . "', a_wann='Login',\ta_was='Neue Mail', a_wie='OLM'", $conn); mysql_query("INSERT INTO aktion set a_user={$u_id}, a_text='" . mysql_real_escape_string($u_name) . "', a_wann='Alle 5 Minuten', a_was='Neue Mail', a_wie='OLM'", $conn); } mysql_free_result($result); } // Prüfen, ob User noch online ist und ggf. ausloggen $alteloginzeit = ""; $query = "select o_id, o_login FROM online WHERE o_user={$u_id} "; $result = mysql_query($query, $conn); if ($result && mysql_num_rows($result) != 0) { $alteloginzeit = mysql_result($result, 0, 1); logout(mysql_result($result, 0, 0), $u_id, "login"); } @mysql_free_result($result); // Userdaten ändern // Login als letzten Login merken, dabei away und loginfehler zurücksetzen. $query = "UPDATE user SET u_login=NOW(),u_away='',u_loginfehler='' WHERE u_id={$u_id}"; $result = mysql_query($query, $conn); if (!$result) { echo "Fehler beim Login: {$query}<BR>"; exit; } // Punkte des Vormonats/Vorjahres löschen und Usergruppe ermitteln, falls nicht Gast if ($u_level != "G" && $communityfeatures) { // TODO // Ist u_sms_anzahl_monat vom aktuellen Monat? // if ($u_sms_anzahl_monat!=date("n",time())){ // $f[u_sms_anzahl_monat]=date("n",time()); // $f[u_sms_anzahl_monat]=0; //} // Ist u_punkte_monat vom aktuellen Monat? if ($u_punkte_datum_monat != date("n", time())) { $f['u_punkte_datum_monat'] = date("n", time()); $f['u_punkte_monat'] = 0; } // Ist u_punkte_jahr vom aktuellen Jahr? if ($u_punkte_datum_jahr != date("Y", time())) { $f['u_punkte_datum_jahr'] = date("Y", time()); $f['u_punkte_jahr'] = 0; } // Aus der Zahl der Gesamtpunkten die Usergruppe ableiten und in u_punkte_gruppe // speichern $f['u_punkte_gruppe'] = 0; foreach ($punkte_gruppe as $key => $value) { if ($u_punkte_gesamt < $value) { break; } else { $f['u_punkte_gruppe'] = dechex($key); } } } // Aktuelle IP/Datum zu ip_historie hinzufügen $datum = time(); $ip_historie_neu[$datum] = $ip; if (is_array($ip_historie)) { $i = 0; while ($i < 3 and list($datum, $ip_adr) = each($ip_historie)) { $ip_historie_neu[$datum] = $ip_adr; $i++; } } // u_agb, ip_historie und Temp-Admin schreiben if ($u_agb == "Y") { $f['u_agb'] = $u_agb; } $f['u_ip_historie'] = serialize($ip_historie_neu); if ($u_level == "A") { // falls Status bisher Temp-Admin -> zurücksetzen. $f['u_level'] = "U"; $u_level = "U"; } $u_id = schreibe_db("user", $f, $u_id, "u_id"); if (!$u_id) { echo "Fataler Fehler beim Login:<PRE>"; print_r($f); echo "</PRE>"; exit; } // Aktuelle Daten des Users aus Tabelle iignore lesen // Query muss mit Code in ignore übereinstimmen $query = "SELECT i_user_passiv FROM iignore WHERE i_user_aktiv={$u_id}"; $result = mysql_query($query, $conn); if (!$result) { echo "Fehler beim Login (iignore): {$query}<BR>"; exit; } else { if (mysql_num_rows($result) == 0) { $ignore[0] = FALSE; } else { while ($iignore = mysql_fetch_array($result)) { $ignore[$iignore[i_user_passiv]] = TRUE; } } } $knebelzeit = NULL; // Aktuelle Userdaten aus Tabelle user lesen // Query muss mit Code in schreibe_db übereinstimmen $query = "SELECT u_id,u_name,u_nick,u_level,u_farbe,u_zeilen,u_backup,u_farbe_bg,u_farbe_alle,u_farbe_priv,u_farbe_noise,u_farbe_sys,u_clearedit,u_away,u_email,u_adminemail,u_smilie,u_punkte_gesamt,u_punkte_gruppe,u_chathomepage,u_systemmeldungen,u_punkte_anzeigen FROM user WHERE u_id={$u_id}"; $result = mysql_query($query, $conn); if (!$result) { echo "Fehler beim Login: {$query}<BR>"; exit; } else { $userdata = mysql_fetch_array($result, MYSQL_ASSOC); $userdata_array = zerlege(serialize($userdata)); $http_stuff_array = zerlege(serialize($http_stuff)); if (!isset($http_stuff_array[0])) { $http_stuff_array[0] = ""; } if (!isset($http_stuff_array[1])) { $http_stuff_array[1] = ""; } if (!isset($userdata_array[0])) { $userdata_array[0] = ""; } if (!isset($userdata_array[1])) { $userdata_array[1] = ""; } if (!isset($userdata_array[2])) { $userdata_array[2] = ""; } if (!isset($userdata_array[3])) { $userdata_array[3] = ""; } // Hole Knebelzeit aus Usertabelle $query = "SELECT u_knebel FROM user WHERE u_id={$u_id}"; $result = mysql_query($query, $conn); if ($result && mysql_num_rows($result) == 1) { $row = mysql_fetch_object($result); $knebelzeit = $row->u_knebel; } @mysql_free_result($result); } // Vorbereitung für Login ist abgeschlossen. Jetzt nochmals Prüfen ob User online ist, // ggf. Session löschen und neue Session schreiben // Tabellen online+user exklusiv locken $query = "LOCK TABLES online WRITE, user WRITE"; $result = mysql_query($query, $conn); $query = "DELETE FROM online WHERE o_user={$u_id}"; $result = mysql_query($query, $conn); // User in in Tabelle online merken -> User ist online unset($f); $f['o_user'] = $u_id; $f['o_raum'] = 0; $f['o_hash'] = $hash_id; $f['o_ip'] = $ip; $f['o_who'] = "1"; $f['o_browser'] = $browser; $f['o_name'] = $userdata['u_nick']; $f['o_vhost'] = $http_host; $f['o_js'] = $javascript; $f['o_level'] = $userdata['u_level']; $f['o_http_stuff'] = $http_stuff_array[0]; $f['o_http_stuff2'] = $http_stuff_array[1]; $f['o_userdata'] = $userdata_array[0]; $f['o_userdata2'] = $userdata_array[1]; $f['o_userdata3'] = $userdata_array[2]; $f['o_userdata4'] = $userdata_array[3]; $f['o_ignore'] = serialize($ignore); $f['o_punkte'] = 0; // Zähler mit 0 Punkten neu initialisieren $f['o_aktion'] = time(); // 5-min Aktionen initialisieren $o_id = schreibe_db("online", $f, "", "o_id"); if (!$o_id) { echo "Fataler Fehler beim Login:<PRE>"; print_r($f); echo "</PRE>"; exit; } // Timestamps im Datensatz aktualisieren -> User gilt als eingeloggt if ($alteloginzeit != "") { $query = "UPDATE online SET o_aktiv=NULL, o_login='******', o_knebel='{$knebelzeit}', o_timeout_zeit=DATE_FORMAT(NOW(),\"%Y%m%d%H%i%s\"), o_timeout_warnung='N' WHERE o_user={$u_id} "; } else { $query = "UPDATE online SET o_aktiv=NULL, o_login=NULL, o_knebel='{$knebelzeit}', o_timeout_zeit=DATE_FORMAT(NOW(),\"%Y%m%d%H%i%s\"), o_timeout_warnung='N' WHERE o_user={$u_id} "; } $result = mysql_query($query, $conn); // Lock freigeben $query = "UNLOCK TABLES"; $result = mysql_query($query, $conn); // Bei Admins Cookie setzen zur Überprüfung der Session if ($userdata['u_level'] == "C" || $userdata['u_level'] == "S") { setcookie("MAINCHAT" . $userdata['u_nick'], md5($o_id . $hash_id . "42"), 0, "/"); } if ($logout_logging) { logout_debug($o_id, "login"); } return $o_id; }