|
You last visited: Today at 02:52
Advertisement
PHP - Problem: Multiaccounts mittels IP ermitteln
Discussion on PHP - Problem: Multiaccounts mittels IP ermitteln within the Web Development forum part of the Coders Den category.
08/08/2014, 14:51
|
#1
|
elite*gold: 0
Join Date: Dec 2008
Posts: 877
Received Thanks: 788
|
PHP - Problem: Multiaccounts mittels IP ermitteln
Guten Tag allesammt, ich sitze jetzt schon seit längerem an einem Problem fest und habe mich nun dazu entschlossen euch um Hilfe zu fragen. Ich programmiere an einer Multiaccount Klasse für mein Browsergame, die anhand einer log Tabelle Spieler mit der selben IP in eine Tabelle (multiaccount) einträgt. Sollten binnend 30 Tagen zu viele Einträge des Users in der Tabelle sein (Besser gesagt, zu viele Tage mit geteilter IP zwischen mehreren Spielern) wird der Administrator benachrichtigt.
Hier erstmal meine Tabellen:
Code:
--
-- Tabelle: log
--
CREATE TABLE IF NOT EXISTS `log` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`user_id` varchar(75) NOT NULL DEFAULT '',
`action` varchar(100) NOT NULL DEFAULT '',
`detail` text,
`time` bigint,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;
--
-- Tabelle: Multiaccount
--
CREATE TABLE IF NOT EXISTS `multiaccount` (
`id` int(10) NOT NULL AUTO_INCREMENT,
`user_id` varchar(75) NOT NULL DEFAULT '',
`log_ids` text,
`reason` text,
`time` bigint,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=34 ;
An sich sucht die Klasse alle Einträge raus, die die gleiche IP besitzen wie der User (User A), dann werden die betroffenen log_ids in der Tabelle multiaccount eingetragen (um mehrfache Einträge zu verhindern), des Weiteren kann so ein 3 Spieler (User C) mit der gleichen IP erfasst werden, ohne dass die anderen 2 Spieler (User A & B) (die bereits einen Eintrag besitzen) einen Eintrag bekommen.
Das Problem liegt dabei, dass wenn der User A sich ein zweites mal einloggt, ein neuer Eintrag in der log Tabelle hinzugefügt wird und so ein neuer Eintrag in der "multiaccount" Tabelle getätigt wird, obwohl besagter User A bereits mit User B einen Eintrag in der multiaccount Tabelle besitzen. Da dies relativ schwierig zu erklären ist, hier einfach ein gekürzter/vereinfachter Ausschnitt meiner Klasse:
PHP Code:
<?php $this->user_ids[] = $user_id;//Eigene user id $time_older = $time-2592000; $qry_log = mysql_query("SELECT * FROM log WHERE action = 'IP' AND detail = '".$_SERVER['REMOTE_ADDR']."' AND time >= '".$time_older."' AND user_id != '".$user_id."'"); if(mysql_num_rows($qry_log) != 0){ while($row_log = mysql_fetch_assoc($qry_log)){ $time_login = $row_log["time"]; $this->user_ids[] = $row_log["user_id"];//Die user_id des Anderen $this->id_log_array[] = $row_log["id"]; } //Eigene logs $qry_log_own = mysql_query("SELECT id FROM log WHERE action = 'IP' AND detail = '".$_SERVER['REMOTE_ADDR']."' AND time >= '".$time_older."' AND user_id = '".$user_id."'"); while($row_own_log = mysql_fetch_assoc($qry_log_own)){ $this->id_log_array[] = $row_own_log["id"]; } $this->id_log_array = array_unique($this->id_log_array); $this->user_ids = array_unique($this->user_ids); for($i=0; $i < count($this->user_ids); $i++){ $array_log_ids_usr = array();//Leeren array für jeden user $array_multi_usr = array(); $list_log_ids_multi = ""; $user_id_multi = $this->user_ids[$i]; $ids_for_qry = join(',',$this->id_log_array); //Alle auffälligen log ids $qry_usr_multi_log = mysql_query("SELECT id FROM log WHERE id IN ($ids_for_qry) AND action = 'IP' AND detail = '".$_SERVER['REMOTE_ADDR']."' AND time >= '".$time_older."' AND user_id = '".$user_id_multi."'"); while($row_log_multi = mysql_fetch_assoc($qry_usr_multi_log)){ //Alle log Ids des spezifischen Benutzers: $array_log_ids_usr[] = $row_log_multi["id"]; } //Bereits benutzte ids: $check_if_multi = mysql_query("SELECT log_ids FROM multiaccount WHERE user_id = '".$user_id_multi."' AND time >= '".$time_older."'"); while($row = mysql_fetch_assoc($check_if_multi)){ $list_log_ids_multi = $row["log_ids"].",".$list_log_ids_multi; } $array_multi_usr = explode(",",$list_log_ids_multi); $array_multi_usr = array_unique($array_multi_usr); if(count(array_intersect($array_multi_usr, $array_log_ids_usr)) != count($array_log_ids_usr)){ //Wenn es noch nicht benutzte ids gibt, dem user einen Eintrag verpassen /*Problem: Wenn User A sich mit der IP X einloggt und der User B tut dies auch werden die beiden log ids in die multiaccount Tabelle eingefügt. Soweit so gut, wenn sich User A jedoch nochmal einloggt, dann wird noch ein Eintrag getätigt, da es eine neue log_id des Users A gibt */ mysql_query("INSERT INTO multiaccount (user_id, log_ids, reason, time) VALUES ('".$this->user_ids[$i]."', '".implode(',',$this->id_log_array)."', 'IP', '".$time."')"); } } } ?>
mfg
|
|
|
08/08/2014, 16:23
|
#2
|
elite*gold: 0
Join Date: Jan 2009
Posts: 731
Received Thanks: 233
|
paar kleine sachen:
1. mysql gibts ab 5.5 net mehr, wieso nutzt du noch den scheiß
2. der aufbau is total scheiße, mach fuer jede tabelle eine klasse um den code von sql zutrennen, dem service sollte es vollkommen egal sein von wo die daten kommen.
3. dir is bewusst das paar leute dynamische ips haben, die sich jeden tag aendern oder? brauchst wenn eine like suche und viellleicht einen cookie fuer multi accounts
4. schon ma an proxys gedacht? da bringt dir die aktuelle ip abfrage 0.
mal paar kleine sachen die du ueber denken solltest
|
|
|
08/09/2014, 16:23
|
#3
|
elite*gold: 0
Join Date: Dec 2008
Posts: 877
Received Thanks: 788
|
Erstmal danke für deine Anregungen hinsichtlich dem code. Das mit dynamischen IPs & Proxys ist mir wohl bewusst, ich habe ja auch nichts davon gesagt, dass die IP abzugleichen die einzige Maßname sei. Auch wenn das mit der IP leicht zu umgehen ist halte ich es dennoch für ein wichtiges Teil einer solchen Klasse. Denn Multiaccounts wird es immer in solchen Spielen geben, man kann lediglich versuchen Multiaccounts das Leben schwieriger zu machen. (Ja ich bin mir bewusst, dass dann nicht nur Multiaccounts davon betroffen sind sondern auch normale Spieler, ich denke jedoch auch dass man hier Kompromisse eingehen muss um im großen Ganzen ein faires Spiel zu ermöglichen)
Ich wäre natürlich weiterhin dankbar einen Lösungsansatz, denn auch wenn ich mich nun vom mysql_* trenne, bleibt mein Problem jedoch weiterhin bestehen.
mfg
|
|
|
|
Similar Threads
|
Whats App Standort ermitteln?
03/15/2014 - Off Topic - 14 Replies
Wenn jemand ein Bild schießt dann speichern sich da ja GPS Daten ein. Und wenn mir jemand das Bild in Whats App schickt, kann ich dann durch Programme ermitteln wo das Bild geschossen wurde? Wenn ja wie heißen diese?
|
[VB.NET].NET Assembly ermitteln
05/13/2013 - .NET Languages - 2 Replies
Ich wollte mich einmal erkundigen, ob es eine Möglichkeit gibt zu ermitteln, ob es sich bei einer angewählten Datei um ein .NET Assembly handelt?
Ich erkundige mich gerade über Reflection, doch bin bis jetzt noch nicht fündig geworden.
Vielleicht weiß einer von euch einen Ansatz?
Grüße
coladose
|
Server IP ermitteln
03/10/2012 - Last Chaos - 5 Replies
Hi, wie komme ich denn an die IP eines LC-Servers ?
THX
|
[C++] Betriebssystem ermitteln
11/11/2011 - Coding Tutorials - 6 Replies
Im Grunde ist das Ganze nicht schwer zu realisieren. Zuerst enumerieren wir für uns valide OS systeme durch:
enum
{
WIN_2000 = 0, WIN_XP, WIN_VISTA, WIN_7
};
Es sollte klar sein, was hier passiert: WIN_2000 ist nun als 0 definiert, Win_XP als 1, WIN_VISTA als 2 und WIN_7 als 3.
|
Homepages ermitteln!!!
03/11/2009 - Off Topic - 13 Replies
Hi leute
hab ne nette seite gefunden, die den preis von websiten ermitellt!
Und elitepvpers ist sage und schreibe:
$358400.8 USD Wert !! ohne scheiß!
|
All times are GMT +2. The time now is 02:52.
|
|