Kezdőoldal » Számítástechnika » Programozás » Hogyan lehetne megoldani a...

Hogyan lehetne megoldani a captcha kiértékelést?

Figyelt kérdés

PHP-ben írtam egy programot, ami elkészít egy véletlenszerűen generált karakterláncból egy képet (captchát). Vázlatszerűen valahogy így néz ki a kód többi része:


session_start();


/* véletlenszerűen generált 6 jegyű kód $string változóba és session-be mentve */

$str = md5(microtime() * mktime() * rand(1, 3256));

$string = substr($str,0,6);

$_SESSION[\\\'key\\\'] = $string;


/* felhasználó által beírt kód $ctcode változóba mentve */

$ctcode = $_POST[\\\'ctcode\\\'];


/* ha a $ctcode és a $string változó különbözik, akkor hibát ír ki oda, ahol majd megjelenik az $e5 változó */

if ($ctcode != $string) {

$e5 = "Az ellenőrző kód helytelen!<br />";

} else {

$e5 = "";

}


/* megjeleníti a másik fájlban generált captcha képet */

echo "<img src=\\\'modules/ctcode.php\\\' alt=\\\'\\\' />";


/* megjeleníti a kitöltendő űrlapot */

echo "<form action=\\\'index.php\\\' method=\\\'post\\\'>

<input name=\\\'ctcode\\\' type=\\\'text\\\' />

<input name=\\\'reg\\\' type=\\\'submit\\\' value=\\\'Kiértékelés\\\' />";


A kódnak csak azt a részét írtam le, ami lényeges (az űrlap többi részét és azoknak a kiértékelését itt kihagytam).


A probléma konkrétan az, hogy ha a felhasználó beírja a kódot és elküldi, akkor a kiértékelés előtt új kódot generál, és kiértékeléskor azzal veti össze a program a beírt kódot, és így sosem fog passzolni. Ezt az egészet úgy szeretném megoldani, hogy a kiértékelés és a kitöltendő űrlap egy oldalba legyen építve. De ha a kódgeneráló részt az űrlap után rakom, akkor a captcha képen nem fog megjelenni a kód, mert akkor előbb a kép fog megjelenni, és utána generálja a kódot.


Akkor mégis hogyan lehetne ezt megoldani?


2009. júl. 27. 17:10
 1/4 A kérdező kommentje:
Azokat a visszafelé perjeleket \\\ nem én írtam oda.
2009. júl. 27. 17:11
 2/4 anonim válasza:

Én úgy oldottam meg, hogy nem Session-be tettem a számot, hanem egy rejtett "hidden" inputba md5-el kódolva.

Az oldal legelején generálok egy kódot, majd ezt kiírom az oldalra, és az md5-el lekódolt számot beleírom a rejtett mezőbe.

Van egy input amibe bekérem a számot. és amikor elküldi az adatokat megvizsgálom, hogy:


$_POST["rejtett_mezo_erteke"] == md5($_POST["beirt_szam"])


Ha ez teljesül, akkor jó számot írt be.


A sessionnal az a gond, hogy egy bizonyos idő múlva lejár. Tehát ha pl betöltik az oldalt, majd 30 perc múlva írják be a számot, akkor valószínű nem fogja elfogadni.

2009. júl. 27. 17:23
Hasznos számodra ez a válasz?
 3/4 anonim válasza:

Előző vagyok.


Esetleg egy próbát megér, hogy a feldolgozás UTÁN generálsz újabb értéket, és addig megőrzi a régi értéket.


Magyarul, miután megnézted, hogy jó kódot írt-e be, utána írod, hogy:


$str = md5(microtime() * mktime() * rand(1, 3256));

$string = substr($str,0,6);

$_SESSION['key'] = $string;

...

2009. júl. 27. 17:25
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Köszi, ezt a hidden-es módszert kipróbálom.
2009. júl. 27. 17:39

Kapcsolódó kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!