Hoi,
Ik wil voorkomen dat iemand vie een page reload of iets dergelijks
opnieuw data uit een formulier kan submitten. Het liefst wil ik dit
opvangen in php.
Iemand enig idee wat een elegante oplossing daarvoor is ?
Greetz, Rick
Likes: 0
Hoi,
Ik wil voorkomen dat iemand vie een page reload of iets dergelijks
opnieuw data uit een formulier kan submitten. Het liefst wil ik dit
opvangen in php.
Iemand enig idee wat een elegante oplossing daarvoor is ?
Greetz, Rick
Rick Speelman wrote:
> Hoi,
>
> Ik wil voorkomen dat iemand vie een page reload of iets dergelijks
> opnieuw data uit een formulier kan submitten. Het liefst wil ik dit
> opvangen in php.
>
> Iemand enig idee wat een elegante oplossing daarvoor is ?
Ik zit op het moment even met hetzelfde probleem. Een nog puur theoretische
oplossing die in mijn geval er denk ik gaat komen, si de volgende. In mijn
geval heb ik alleen ingelogde gebruikers met dus een $_SESSION.
Mijn plan was ongeveer het volgende:
1. Maak een redelijke random string aan (ik gebruik een hexadecimale string
van 16 karakters).
2. Sla dit op in $_SESSION['reload_stop'].
3. Als een van de eerste zaken op de website: $_SESSION['reload_stop_old']
= $_SESSION['reload_stop'], en een nieuwe random string voor
$_SESSION['reload_stop'].
4. In elk formulier dat daadwerkelijk een actie uitvoert (in ieder geval
niet herladen/opnieuw uitgevoerd moet worden) een hidden input element
'reload_stop' met als waarde $_SESSION['reload_stop'].
5. Bij uitvoeren van acties deze alleen uitvoeren als $_POST['reloas_stop']
== $_SESSION['reload_stop_old'].
Dat is in mijn geval voldoende voor de uit te voeren acties denk ik.
Implementatie moet nog komen, dus wellicht kom ik nog problemen tegen.
Wellicht zijn er hier mensen die dit vaker bij de hand gehad hebben die een
beter (of in ieder geval getest en afdoende) alternatief kunnen geven?
Overigens, voor niet ingelogde gebruikers zou je iets kunnen doen met een
algemene voorraad van sleutels oid, die globaal voor alle gebruikers
'actiesleutels' om het zo meer even te noemen afvinkt als gebruikt (en
wellicht een aantal uren later weer activeert).
--
Rik Wasmus
Rik schreef:
> Rick Speelman wrote:
>> Hoi,
>>
>> Ik wil voorkomen dat iemand vie een page reload of iets dergelijks
>> opnieuw data uit een formulier kan submitten. Het liefst wil ik dit
>> opvangen in php.
>>
>> Iemand enig idee wat een elegante oplossing daarvoor is ?
>
> Ik zit op het moment even met hetzelfde probleem. Een nog puur theoretische
> oplossing die in mijn geval er denk ik gaat komen, si de volgende. In mijn
> geval heb ik alleen ingelogde gebruikers met dus een $_SESSION.
Ik heb het al opgelostIk heb met rand() een willekeurig nummer
aangemaakt in het form (hidden), en deze ook aan een sessie var
toegewezen ($_SESSION['var']).
Na het submitten moeten deze twee weer overeenkomen. Als ze
overeenkomen, actie uitvoeren en de sessie variable weer unsetten
(unset($var)).
Hierna kan de actie dus niet meer worden uitgevoerd omdat beiden niet
meer overeenkomen.
Het kan nog wel wat efficiënter en beter, maar het werkt voor wat ik wil
eerst wel even goed genoeg
Greetz, Rick
Rik schreef:
> Dat is in mijn geval voldoende voor de uit te voeren acties denk ik.
> Implementatie moet nog komen, dus wellicht kom ik nog problemen tegen.
> Wellicht zijn er hier mensen die dit vaker bij de hand gehad hebben die een
> beter (of in ieder geval getest en afdoende) alternatief kunnen geven?
Jezelf opnieuw laden voordat er output op het scherm staat en poef ..
weg post vars :-)
if ($_POST)
{
// doe dingen met de variabelen zoals invoegen in mysql
header ('Location:'. $dezepagina);
}
else
{
// html pagina oid
}
--
Arjen
http://www.hondenpage.com
On Fri, 16 Feb 2007 10:29:54 +0100, Arjen <dont@mail.me> wrote:
> Rik schreef:
>
>> Dat is in mijn geval voldoende voor de uit te voeren acties denk ik.
>> Implementatie moet nog komen, dus wellicht kom ik nog problemen tegen.
>> Wellicht zijn er hier mensen die dit vaker bij de hand gehad hebben die
>> een
>> beter (of in ieder geval getest en afdoende) alternatief kunnen geven?
>
> Jezelf opnieuw laden voordat er output op het scherm staat en poef ..
> weg post vars :-)
Yup, gebruik ik nu zelf ook al weer een tijdje, werkt lekker.
--
Rik Wasmus