Jag har nu suttit i ett bra tag och försökt lösa problemet med dubbelpostning, utan att ha lyckats. Det går att lösa i javascript, men jag vill ha det i php. Hur gör man?
Jag vet inte vilket sätt som är bäst egentligen, men jag kan komma på två:
Ha en tidsgräns för hur tätt en användare kan skriva inlägg. Spara tiden för senaste post i en sessionsvariabel och jämför mot denna när en ny post görs. 30 sekunder kan vara en lämplig tid.
Jämför inlägget användaren försöker posta med föregående sparat inlägg. Är de lika är det troligtvis en dubbelpostning.
Nu kör jag mest ASP men tekniken är underordnad användningen.
Jag brukar ha formulär på en sida, databashantering på en annan och "tack" på en tredje.
index.asp
confirm.asp
thankyou.asp
Jag har använt detta i över tio år och inte fått en enda dubbelpost eller skickade brev eller vad som helst på den tiden. Så... Jag skulle säga att tekniken som sådan är rätt vattentät mot dubbelposter. Men att tro är att inte veta!!
Om man backar i webbläsaren skulle jag gissa att det går att dubbelposta, men det är samtidigt en medveten manöver, inte av misstag.
Det är olika hur man gör. Detta passar för mig och i alla sammanhang har det passat men det är mycket möjligt att det finns sammanhang där det inte passar, bara det att jag inte har kommit dit ännu!! :-)
Vad menar du med dubbelpostning? Är det att det blir två gånger om användaren postar ett inlägg och trycker F5 och laddar om sidan? Det bästa är isf. att spara inlägget och sen köra:
Det behöver inte vara på olika sidor. Det är bara jobbigt och ger i många fel felaktig respons mot personer som kommit till sidan på alternativa sätt. Jag kör alltid formulär, kontroller och "tack" på samma sida.
Rekommenderar Ledels punkt 2.
Innan en post sparas, skapar du en checksumma av alla fälten. Denna checksumma kontrolleras mot databasen/session beroende vad du är bekväm med för metod. Förutom indatafälten bör checksumman skapas baserat på värden som identifierar den unika användaren.
Det behöver inte vara på olika sidor. Det är bara jobbigt och ger i många fel felaktig respons mot personer som kommit till sidan på alternativa sätt. Jag kör alltid formulär, kontroller och "tack" på samma sida.
Rekommenderar Ledels punkt 2.
Innan en post sparas, skapar du en checksumma av alla fälten. Denna checksumma kontrolleras mot databasen/session beroende vad du är bekväm med för metod. Förutom indatafälten bör checksumman skapas baserat på värden som identifierar den unika användaren.
Precis, t.ex. så kan du sätta ihop en checksumma som ser ut såhär: