Gå til innhold

Motvirke dobbelposting ved refresh av siden


Anbefalte innlegg

Hvordan kan jeg motvirke at POST variable blir kjørt gjennom systemet en gang til når man refresher siden?

 

Som her for eks, hvordan er det gjort for at denne posten ikke blir lagret i forumdatabasen en gang ekstra om jeg trykker på F5 rett etter å ha postet den?

Lenke til kommentar
Videoannonse
Annonse

mest vanlig er vel å kjøre en refresh/redirect slik at nettleseren ikke sender inn POST-data på nytt hvis noen trykker refresh i nettleseren. Utover det må man begynne å loggføre når ting ble utført sist og sjekke om brukeren allerede har gjort noe de x siste sekundene (eller hva det nå måtte være).

Lenke til kommentar

Det enkleste er, som Ernie sa, å bruke redirect. Når noen poster noe, så kan du legge inn en redirect fra siden som legger inn posten i databasen til siden som viser posten. Du kan bruke følgende kode for å legge til en redirect:

 

header('303 See Other HTTP/1.1');
header('Location: http://din.internett.si.de/noe/');
// Dette vil også fungere:
header('Location: ../enfil.php');

Lenke til kommentar

Det er og mulig å bruke en token i skjemaet om bare vil virke en gang, andre gang brukere sender inn skjemaet med samme token så skjer det ingen ting. Dette vil også motvirke CSRF.

 

Eks:

if(count($_POST) > 2)
{
    if(strcmp($_POST['token'], $_SESSION['token']) != 0) 
    {
        // Feilmelding, evnt bare vist skjemaet på nytt
    }
     // Pass på at token'en bare fungere en gang
     unset($_SESSION['token']);
}
?>
<form>
.....
<?php
$token = md5(microtime());
$_SESSION['token'] = $token;
?>
<input type="hidden" name="token" value="<?php echo $token ?>">
....
</form>

Endret av Runar0
Lenke til kommentar

Hvorfor ikke utføre en sjekk som sjekker om det siste innlegget er identisk med det som brukeren prøver å poste? Så kan du legge til en tidssjekk (feks. 10min) altså at dobbeltposting blir lov etter 10min, feks.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...