harald_ Skrevet 13. mars 2008 Del Skrevet 13. mars 2008 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
Ernie Skrevet 14. mars 2008 Del Skrevet 14. mars 2008 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
Mathias-S Skrevet 14. mars 2008 Del Skrevet 14. mars 2008 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
Runar0 Skrevet 14. mars 2008 Del Skrevet 14. mars 2008 (endret) 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 14. mars 2008 av Runar0 Lenke til kommentar
MC2 Skrevet 15. mars 2008 Del Skrevet 15. mars 2008 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
qualbeen Skrevet 15. mars 2008 Del Skrevet 15. mars 2008 Er ikke dette den beste måten? orginalside.php: <form action="en_annen_side.php"> ... en_annen_side.php: //siste linje i scriptet: header('Location: originalside.php'); Er vel dette de andre i tråden også sier Lenke til kommentar
Garanti Skrevet 16. mars 2008 Del Skrevet 16. mars 2008 Men da må en huske å bruke ob_start() og ob_flush()! Lenke til kommentar
qualbeen Skrevet 17. mars 2008 Del Skrevet 17. mars 2008 tull, om man har litt orden i sakene trengs ikke ob_start/flush. Siden som tar imot post-data skal ikke sende noe til browseren, den skal kun ta imot og behandle post-skjemaet før browser blir videresendt til neste side. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå