Mijn eerste bericht hier, deze gaat gelijk over een tutorial die op deze site geplaatst is.
Ik heb een website waar mensen comments in kunnen plaatsen, eerst had deze een popup achtige structuur. Ik had nooit last van spam dus dat was mooi meegenomen maar aan de andere kant was het voor de gebruiker vervelend om met popus te worden geconfronteerd.
Nu heb ik dit omgebouwd in een wat conventionelere methode maar je raad het al ik wordt volgespamd. Zo'n 100 berichten per dag.
Graag had ik dan een captcha ingebouwd om het meeste (zo niet alles) te voorkomen. Ik was dan ook blij verrast met de tutorial die hier op de site staat door NRZonline.
Helaas krijg ik het geheel niet werkend.
Ik heb de code iets aangepast omdat bij mij nog PHP 4 draait (str_split wordt dan niet herkend) en in een functie geplaatst. Te zien hier: http://www.plaatscode.be/3075/
Op mijn index.php include ik mijn functions (waaronder dus de cap_gen()) en include ik ook een main.php waar mijn form in staat.
Ik krijg geen foutmeldingen maar ik krijg ook geen plaatje te zien. (als ik overigens het probeer zonder include (met de juiste header) dan werkt het wel)
imagepng ($image, 'captcha.png'); // de .png image aanmaken als captcha.png
Die regel zegt:
Maak het plaatje, $image, en noem het plaatje captcha.png.
Dus je moet je plaatje op deze manier invoegen:
<img src="captcha.png" alt="" />
En voordat je dat plaatje aanroept (bijvoorbeeld bovenaan de form) de functie cap_gen() aanroepen, zodat het plaatje wordt gemaakt.
Stel dat meerdere mensen tegelijkertijd deze CAPTCHA-functionaliteit aanroepen?
Gebruiker 1 roept een pagina aan waar van deze functionaliteit gebruik wordt gemaakt. Plaatje A wordt gegenereerd (met een tekst).
Tegelijkertijd roept een andere gebruiker deze zelfde pagina aan, en genereert plaatje B (plaatje wordt overschreven?).
Vervolgens laadt gebruiker 1 met enige vertraging (om wat voor reden dan ook) het plaatje... Dan krijgt ie plaatje B te zien...
Die zou je dus ook moeten zien.
Maar wat FangorN zegt, het is inderdaad beter om je captcha-maken in een apart bestand te zetten (dan kan je ook een header invoegen) en linken naar je plaatje met
<img src="maakcaptcha.php" alt="" />
@FangorN: ik heb er ook al aan gedacht om dat te doen voor mijn eigen pagina, misschien helpt dat ook tegen het feit dat sommige mensen de captcha in de cache van IE komt, wat voor problemen (lees verwarring) kan zorgen.
<?php
// Stuurt headers naar de pagina, zodat de afbeelding niet word gecached
header('Expires: Mon, 24 Jul 1997 04:00:00 GMT');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').'GMT');
header('Cache-Control: no-chache, must-revalidate');
header('Pragma: no-cache');
?>
<?php
// Stuurt headers naar de pagina, zodat de afbeelding niet word gecached
Dat is inderdaad met sessies...maar ik wil zonder sessies indien mogelijk natuurlijk...
Thomas - 10/11/2006 15:27 (laatste wijziging 10/11/2006 15:27)
Moderator
Je moet op een of andere manier informatie over het plaatje overdragen.
HTTP is een "stateless protocol" - d.w.z. het onthoudt geen informatie bij overgang van pagina A naar pagina B.
Hiervoor zijn cookies / sessies / etc in het leven geroepen.
Je zult op enigerlei wijze (cookie, sessie, ...) de informatie over moeten brengen.
En daarvoor zijn sessies in dit geval de meest veilige, aangezien de bezoeker de sessies niet uit kan lezen/kan veranderen.
Stel dat je de code in een cookie zou zetten, de bot leest de cookie uit, weg captcha-beveiliging.