login  Naam:   Wachtwoord: 
Registreer je!
 Forum

[opgelost] Captcha in samenwerking met session: probleem

Offline Nrzonline - 01/08/2006 02:18 (laatste wijziging 01/08/2006 14:04)
Avatar van NrzonlinePHP ver gevorderde Hey SiMa Leute,

Ik ben zojuist achter een probleem gekomen in mijn Captcah systeem. Voor de gene die niet weten wat een captcha is, klik hier. Het probleem zit als volgt: (ps. Ik wil niemand de les o.i.d lezen, maar ik probeer alles even zo goed en duidelijk mogelijk uit te leggen om misverstanden te voorkomen. Dus mocht je bij wat informatie denken van 'o ja joh? Meen je dat?', dan is dat niet omdat ik jullie voor dom o.i.d aanzie! Maarja, het probleem...)

Zodra je op register.php komt, controleerd hij of de sessie voor de captcha is gezet ( $_SESSION['confirm_key'] ). Zoniet, maakt hij die sessie aan. ( $_SESSION['confirm_key'] = $new_key; ) Zowel, houd hij die aan. Deze sessie moet, omdat bij het submitten de pagina refreshed. Als die sessie er niet is, krijg ik dus elke keer een nieuwe key en zou de inhoud die je opgeeft nooit kloppen. Als er iets niet klopt in één van de if(else) controles, en er wordt een foutmelding aangemaakt, en maakt hij de sessie leeg ( $_SESSION['confirm_key'] = ""; ). Zou dit niet gebeuren blijft de sessie staan, en wordt er een nieuwe key aangemaakt die uiteindelijk niet klopt met de oude sessie. Maarja, dat werkt allemaal mooi, en nu komt dan het echte probleem. Als ik de pagina refresh, maakt hij ook weer een nieuwe key aan, die ik niet van tevoren leeg kan gooien door gewoon aan het eind van mijn script $_SESION['confirm_key'] = ""; te zetten, want bij het submiten zou hij dan ook de key weer leeg gooien... en dan kan ik alsnog niet de key die is gezet controleren.

Dus weet iemand een manier hoe ik er voor kan zorgen dat er bij een handmatige refresh (dus ook index.php -> register.php -> index.php -> register.php (omweg refresh, maar session wordt wel gezet)) een sessie wordt leeg gegooid, en een nieuwe aan te maken , en zo dat als er wel een echte submit is dat dit niet gebeurd?

Voor degene die dit snapt (beter kan ik het denk ik echt niet uitleggen) en die een beetje kan helpen.. Alvast SUPER, maar dan ook SUPER bedankt, want ik weet hier echt even niets op te verzinnen.

Mocht je willen testen wat ik ongeveer bedoel, doe dan het volgende.
#1. ga naar http://www.race4respect.com/reset.php
#2. vul in gebruiker: testkees email: test@test.nl
#3. vul de code in uit de image in, en druk op 'email reset details'
- Hier zul je zien dat alles in goed gaat zoals het moet, hij gaat namelijk niet zeuren over ongeldige key (als je hem goed hebt ingevuld).
Probeer nu het volgende:
#1. ga weer naar http://www.race4respect.com/reset.php
#2. druk op F5 om de pagina te refeshen
#3. vul in gebruiker: testkees email: test@test.nl
#4. vul de code in uit de image in (GOED), en druk op 'email reset details'
- Nu zie je in het rode vakje het volgende staan:
Citaat:
The provided confirmation key was not equal to the content of the image
. Ofterwijl je hebt de code 'verkeerd' ingevuld volgens de site, wat dus niet het geval is. Dat moet dus opgelost worden, en het probleem ontstaat door wat ik in het begin heb uitgelegd.

Het klinkt misschien ingewikkeld of misschien ook niet, maar er is vast (een aardig makkelijke) oplossing voor.

Nogmaals, alvast héél erg bedankt,
Nrzonline

4 antwoorden

Gesponsorde links
Offline Gerard - 01/08/2006 03:15
Avatar van Gerard Ouwe rakker
Citaat:
Dus weet iemand een manier hoe ik er voor kan zorgen dat er bij een handmatige refresh (dus ook index.php -> register.php -> index.php -> register.php (omweg refresh, maar session wordt wel gezet)) een sessie wordt leeg gegooid, en een nieuwe aan te maken , en zo dat als er wel een echte submit is dat dit niet gebeurd?


Als een formulier wordt gesubmit wordt $_SERVER['REQUEST_METHOD'] naar 'POST' gezet. Hier kan je dus op controleren.

Als een user die pagina binnenkomt:

Stap 1: Is de sessie['confirm_key'] leeg?
Ja: Nieuwe key aanmaken (gebruiker komt net binnen)
Nee: Ga naar volgende stap

Stap 2: Is de REQUEST_METHOD gelijk aan POST
Ja: Key laten staan (is bezig met verwerken formulier)
Nee: Nieuwe key aanmaken (gebruiker komt binnen vanuit manuele refresh)
Offline Nrzonline - 01/08/2006 03:45 (laatste wijziging 01/08/2006 03:47)
Avatar van Nrzonline PHP ver gevorderde Dat bedoel ik, een logische en simpele oplossing.. Toch ben ik er zelf stom genoeg niet op gekomen. Proximus, super erg bedankt... Ik ga het morgen even toepassen en testen. *geez i feel like an idiot *

Thanks again,
Nrzonline
Offline Gerard - 01/08/2006 04:10
Avatar van Gerard Ouwe rakker We zitten hier allemaal om te leren. En zelfs de besten maken wel fouten. Ik heb bijvoorbeeld dagen zitten denken waarom mijn rmdir() niet mijn directories wilde verwijderen.

Bleek dat ik met mijn isDirectoryEmpty() de directory opende op te kijken of hij leeg was voordat ik hem zou verwijderen, maar dat ik vergat mijn directory handle te closen. Resultaat was dat op het moment dat ik probeerde de directory te verwijderen ik een error kreeg omdat de directory op dat moment nog in gebruik was door PHP.

Daar heb ik dus dagen op gezeten. Ik probeer iig altijd alles stapje voor stapje door te nemen waar ik mee bezig ben en zo te kijken hoe het logisch in elkaar steekt.

Die stapjes die ik hierboven voor je heb beschreven maak ik voor mezelf ook dagelijk. Het is gewoon om een logisch en duidelijk beeld te krijgen wat er moet gebeuren.
Offline Nrzonline - 01/08/2006 13:59 (laatste wijziging 01/08/2006 14:02)
Avatar van Nrzonline PHP ver gevorderde Ok, dank voor je heldere en steunende uitleg ;) Ik heb het nu toegepast, en het werkt prima.

Dit heeft alles opgelost.
  1. <?PHP
  2. $confirm_key = $keygen -> keygenerator(rand (4,5), 3);
  3. if (empty ($_SESSION['confirm_key']))
  4. {
  5. $_SESSION['confirm_key'] = $confirm_key;
  6. }
  7.  
  8. // Veranderd naar het volgende:
  9.  
  10. if ($_SERVER['REQUEST_METHOD'] != "POST")
  11. {
  12. $_SESSION['confirm_key'] = "";
  13. $confirm_key = $keygen -> keygenerator(rand (4,5), 3);
  14. }
  15. if (empty ($_SESSION['confirm_key']))
  16. {
  17. $_SESSION['confirm_key'] = $confirm_key;
  18. }
  19. ?>


Nogamaals bedankt, en deze topic is [opgelost].
Nrzonline
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.212s