Abfragen drosseln?

03/30/2016 20:40 aiimsh0ckz#1
Hey Coder,

ich hab heute in der Arbeit nach einem Script gesucht, jetzt finde ich's nicht mehr T_T"

Also, worum es mir geht: Ich brauch eine Funktion, die (anhand von Sessions) überprüft, ob in einem Zeitraum von x Sekunden schonmal eine Seite (bzw ein Script von einer Seite) von jenem Benutzer ausgeführt wurde (quasi ein Cooldown).

Ergo eine Abfrage setzen, ob in einem Zeitraum (zwischen Timestamp 1 und Timestamp 2 z. B.) von x Sekunden schon jene Seite aufgerufen wurde. Wenn Ja, soll diese Abfrage durch ein die() die anderen (sonst folgenden) Abfragen abbrechen/überspringen.

Nur weiß ich grad nicht mehr, wie ich das am besten realisieren soll. Kann mir da mal jemand kurz auf die Sprünge helfen?

Greez, aiimsh0ckz.
03/30/2016 20:58 False#2
Naja, gibt ja eigentlich nur ein Weg.. bzw der mir grade einfällt...Funktions Aufruf speichern, prüfen und updaten...
Wie du es speicherst musst du selber entscheiden.
03/30/2016 21:01 mastermo#3
Eine Weitere Möglichkeit wäre (so stell ichs mir jedenfalls vor) möglicherweise eine Session die entsprechend lange gültig ist. Folglich müsste dann abgefragt werden ob die Session noch existiert.

korrigiert mich, wenn ich falsch liege :)
03/30/2016 21:21 False#4
Quote:
Originally Posted by mastermo View Post
Eine Weitere Möglichkeit wäre (so stell ichs mir jedenfalls vor) möglicherweise eine Session die entsprechend lange gültig ist. Folglich müsste dann abgefragt werden ob die Session noch existiert.

korrigiert mich, wenn ich falsch liege :)
Ist ja das gleiche nur das du es mit der Session speicherst :p
03/30/2016 21:57 Serraniel#5
Wie hier beschrieben zwischenspeichern, entweder per Cookie (wärs einfachste), oder wenn du es serverseitig und somit wirklich "sicher" haben willst die calls in ner Datenbank loggen mit Timestamp, User und am besten direkt mal alle Einträge die eh nicht mehr relevant sind dabei mit cleanen weil sonst hast nen Haufen Datenmüll.

Ein die() ist btw auch nicht die richtige Lösung für das was du willst, da du damit die Ausführung des Skripts komplett killst (wie der Name halt auch shcon äußert) und halt nicht zum überspringen nutzen kannst. If Abfragen regeln hier.
03/30/2016 22:01 aiimsh0ckz#6
Danke für eure Tipps! Hab das jetzt mal so gelöst:

PHP Code:
<?php
    session_start
();
    
    
/* Hier schon initialisieren für späteren Gebrauch */
    
$check_last_access 0;

    
/* --- Vorab Prüfen, ob Script schon innerhalb 60s ausgeführt wurde --- */

    
if(isset($_SESSION['check'])) {
        
$check_last_access = (int)$_SESSION['check'];
    }

    
/* Eigentliche Überprüfung */
    
if($check_last_access && (time() - $check_last_access 60)) {
        die(
"Anfrage wurde innerhalb der letzen 60 Sekunden bereits gestellt.");
    }

    
/* --- Wenn es diese Anfrage überlebt hat, wurde innerhalb der letzen 60 Sekunden noch nicht Zugegriffen
    -> Script kann ausgeführt werden --- */

    /* Zeitstempel erneuern */
    
$_SESSION['check'] = time();

    
/* Restliche Scripts */
?>