Um in einem Umfragetool einigermassen realistische Ergebnisse zu erzielen, wird die IP des Teilnehmers sowie dessen Session-ID, die vom Tool automatisch generiert wird in der Datenbank mit abgespeichert. Das Tool prüft dann, ob in den letzten X Sekunden ( X kann eingestellt werden ) bereits ein Abstimmungsergebnis mit der IP des aktuellen Besuchers oder der SessionID des aktuellen Users vorhanden ist. Wenn ja, wird das aktuelle Ergebnis angezeigt und eine Abstimmung wird nicht zugelassen, wenn nicht, kann der User abstimmen.
Bei mir klappt das auch einwandfrei, nur gibt es einen User, der das irgendwie schafft zu umgehen, da ich heute zwischen 0:25 und 0:30 Uhr 42 Abstimmungsergebnisse des Users in der Datenbank hatte. Alle 42 hatten dieselbe IP und dieselbe Session-ID. Und ich weiss nicht, wie er das System umgeht, weil wie gesagt ich beim Testen selbst mit dauerhaftem Drücken von F5 nicht mehr wie ein Ergebnis in die DB eingetragen bekomme.
Hier der Code-Teil mit der Abfrage, ob der User bereits abgestimmt hat:
Code:
$sql2 ="SELECT count(id) FROM ".$prefix_table."u_replies WHERE un='$un' AND ( ip='".getenv(REMOTE_ADDR)."' OR session='$dclp' ) AND zeit > NOW()-".$cfg[sperrzeit];
if( ($result = $db->sql_query($sql2)) )
{
$r = $db->sql_fetchrow($result);
if($r[0] > 0)
{ $u_action = "result"; }
}
Ich selber kann das nicht umgehen und bin daher vollkommen ratlos, wie das überhaupt passieren kann. Hat jemand vielleicht Ideen für mich, wonach ich suchen muss?
Danke im Voraus
Frank-Andre
P.S. Pro registriertem user nur eine Abstimmung geht nicht, da die Umfragen unter allen Besuchern laufen soll!
_________________ if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
ich habe durch Zufall heute nacht herausgefunden, was passiert ist. Es geht um die Query:
SELECT count(id) FROM ".$prefix_table."u_replies WHERE un='$un' AND ( ip='".getenv(REMOTE_ADDR)."' OR session='$dclp' ) AND zeit > NOW()-".$cfg[sperrzeit]
und dort insbesondere um den Part
zeit > NOW()-".$cfg[sperrzeit]
Zeit ist ein timestamp-Feld und mit dieser Abfrage wird geprüft, ob innerhalb der Sperrzeit der User mit der IP / Session-ID bereits gevotet hat. Das klappt tagsüber auch einwandfrei. Ich hätte mich ja bereits wundern müssen, dass die Mehrfachvotes eines Users immer in der Zeit zwischen 0:15 und 0:30 Uhr passierten. Und heute nacht bin ich um diese Zeit online und stelle fest, dass auch ich auf einmal sooft voten kann, wie ich möchte. Ich habe nun die Zeitabfrage nicht mehr direkt in der Query ermittelt, sondern folgendermassen geändert:
Code:
$check_time = time() - $cfg[sperrzeit];
$check_time2 = strftime("%Y%m%d%H%M%S",$check_time);
$sql2 ="SELECT count(id) FROM ".$prefix_table."u_replies WHERE un='$un' AND ( ip='".getenv(REMOTE_ADDR)."' OR session='$dclp') AND zeit > " . $check_time2;
Und siehe da, der Bug ist behoben!!!!
Bin froh, dass ich heute nacht online war, sonst hätte ich wohl noch ewig gesucht. Wobei ich noch nicht so richtig verstehe, warum der vorherige Code mal ging und nach Mitternach nicht ......
Frank-Andre
_________________ if ( $ahnung == 'keine' ) { use ( Suche ) }
if ( $antwort == 0 ) { post ( $frage ) }
Nächstes Thema anzeigen Vorheriges Thema anzeigen
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum nicht posten Du kannst Dateien in diesem Forum herunterladen