Autor
|
Tema: Ayuda con captcha (Leído 5,050 veces)
|
DarkItachi
Desconectado
Mensajes: 516
Itachi Uchiha
|
Hola, estoy haciendo un captcha para mi web y me ha surgido un problemilla.
Os planteo la situación, tengo los siguientes archivos:
register.php captcha.php
El primero me muestra el captcha y mediante javascript y php en teoría tiene que decir si es correcto, el segundo me lo genera y me envía el código mediante $_SESSION['captcha'] ; naturalmente, el primero también lo lee desde $_SESSION['captcha'] .
Os preguntaréis, ¿cuál es el problema?
El problema esque $_SESSION['captcha'] me devuelve el código de captcha de la página anterior. Es decir:
- Voy a la página y se genera un captcha (E6DAS) y el código está vacio: "" - Recargo la página y se genera otro captcha (PA9SF), pero el código es el de la página anterior (E6DAS) - Recargo la página y se genera otro captcha (ASD4D), pero el código es el de la página anterior (PA9SF)
Antes de mostrar $_SESSION['captcha'] hago un session_start() , y creo que tendría que funcionar bien, pero no sé dónde meto la pata...
¿Alguna idea?
Saludos.
|
|
|
En línea
|
Come to me when you have these eyes...
By more that you try it, a feather never will achieve to fly.
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Lo mejor seria que muestres el source de registerr y creo que no esta de mas el captcha.php
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
DarkItachi
Desconectado
Mensajes: 516
Itachi Uchiha
|
Aquí estan register.php <script type="text/javascript" src="sha1.js"></script> <script type="text/javascript"> //Función para validar el formulario function verificar_correo(texto) { var status = false; var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i; if (texto.search(emailRegEx) != -1) { status = true; } return status; } function validar() { var noerrors=1; var charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"; var usu1=document.registro.usuario.value; var pas1=document.registro.pass.value; var pas2=document.registro.pass2.value; var email=document.registro.correo.value; if (usu1.length>3) { for (i=0;i<usu1.length;i++) { if (charset.indexOf(usu1.charAt(i),0)==-1) { alert("The username only can contain alphanumeric characters [a-z,A-Z,0-9], dashes [-] and underscores [_]."); noerrors=0; break; } } } else { alert("The username must be equal or longer than 4 characters."); } if (pas1!=pas2) { alert("The passwords doesn't match. Please, rewrite them."); noerrors=0; } else if (pas1.length<4 || pas2.length<4) { alert("Password must be equal or longer than 4 characters."); noerrors=0; } if (!(verificar_correo(email))) { alert("The email that you wrote is invalid."); noerrors=0; } var thecaptcha=<?php echo '"'.$_SESSION['captcha'].'"'; ?>; //aqui hay code php if (thecaptcha!=document.registro.captchacode.value) { alert(thecaptcha); alert("Please, write again the captcha, you don't writted it properly."); } document.registro.js.value=1; document.registro.pass=sha1(sha1(document.registro.pass.value)); document.registro.pass2=sha1(sha1(document.registro.pass2.value)); if (noerrors==1) { document.registro.submit(); } } </script> <img src="captcha.php">
captcha.php <?php $numcaracteres=8; $caracteres = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $codigo = ''; $i = 0; while ($i < $numcaracteres) { $i++; } $ancho = 300; $alto = 60; imageline($imagen, 0, 5, $ancho, 5, $color1); imageline($imagen, $ancho/4, 0, $ancho/2, $alto, $color1); imageline($imagen, 0, 18, $ancho, 18, $color1); imageline($imagen, 46, 0, 86, $alto, $color1); header("Content-Type: image/png"); $_SESSION["captcha"] = $codigo; ?>
|
|
|
En línea
|
Come to me when you have these eyes...
By more that you try it, a feather never will achieve to fly.
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Bueno, te explico lo que pasa. 1- Imprimes el valor de la Sesión captcha, como no existe la sesión captcha, no muestra nada pero mas abajo en
Modificas el valor de la sesión captcha y le agregas el valor que contiene la captcha. Eso haces en el primer momento de ejecución: 1-Muestra el valor de la Sesión captcha, luego muestra la imagen y luego modificas el valor de la sesión captcha con el valor de la captcha actual. 2-Muestra el valor de la Sesión captcha (Recordando que el valor de la captcha lo modificaste por el valor de la captcha actual), luego muestra la imagen y luego modificas el valor de la sesión captcha con el valor de la captcha actual.
Ejemplo de lo que haces: <?php echo $_SESSION['a'];//Muestro la Session a $_SESSION['a'] = $_GET['x'];//Modifico la Session por otro valor echo "<br>".$_SESSION['a']; //Muestro el nuevo valor de la Session a ?>
Otro ejemplo: <?php $var = 'hola mundo'; echo $var; $var = '<br>Adios mundo'; echo $var; ?>
Por lo tanto, siempre el primer valor que imprimo sera diferente al segundo. Lo que tienes que hacer, es mostrar primero la captcha antes de mostrar el valor que contiene la captcha. Saludos.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
DarkItachi
Desconectado
Mensajes: 516
Itachi Uchiha
|
¿Y cómo puedo conseguir eso?, no consigo ver la manera de cambiarlo Saludos PD: Así el código lo he puesto esquemático, pero en la web real hay muchos tags HTML y texto de por medio antes de poner la imagen del captcha, y naturalmente lo mismo después de este.
|
|
« Última modificación: 10 Abril 2011, 16:00 pm por DarkItachi »
|
En línea
|
Come to me when you have these eyes...
By more that you try it, a feather never will achieve to fly.
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
Ps ya sabes porque causa que se muestra el valor de la capcha anterior, nose como podría decirte como lo pudieras cambiar ya que no veo el source completo. Y si es muy largo no creo que alguien intente entender el source... - Lo mejor seria que trates de resolver el problema, sabes la causa y solo queda pensarlo ya que el problema es lógico.
- Otra opción, seria que nos muestre el algoritmo completo que usas pero seria muy tedioso escribirlo xD y siempre esta la opción que se te olvide algo.
Lo mejor es que lo trates de resolver y te serviría de experiencia. Saludos.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
DarkItachi
Desconectado
Mensajes: 516
Itachi Uchiha
|
<html> <script type="text/javascript" src="sha1.js"></script> <script type="text/javascript"> //Función para validar el formulario function verificar_correo(texto) { var status = false; var emailRegEx = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i; if (texto.search(emailRegEx) != -1) { status = true; } return status; } function validar() { var noerrors=1; var charset="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_"; var usu1=document.registro.usuario.value; var pas1=document.registro.pass.value; var pas2=document.registro.pass2.value; var email=document.registro.correo.value; if (usu1.length>3) { for (i=0;i<usu1.length;i++) { if (charset.indexOf(usu1.charAt(i),0)==-1) { alert("The username only can contain alphanumeric characters [a-z,A-Z,0-9], dashes [-] and underscores [_]."); noerrors=0; break; } } } else { alert("The username must be equal or longer than 4 characters."); } if (pas1!=pas2) { alert("The passwords doesn't match. Please, rewrite them."); noerrors=0; } else if (pas1.length<4 || pas2.length<4) { alert("Password must be equal or longer than 4 characters."); noerrors=0; } if (!(verificar_correo(email))) { alert("The email that you wrote is invalid."); noerrors=0; } var thecaptcha=<?php echo '"'.$_SESSION['captcha'].'"'; ?>; if (thecaptcha!=document.registro.captchacode.value) { alert(thecaptcha); alert("Please, write again the captcha, you don't writted it properly."); } document.registro.js.value=1; document.registro.pass=sha1(sha1(document.registro.pass.value)); document.registro.pass2=sha1(sha1(document.registro.pass2.value)); if (noerrors==1) { document.registro.submit(); } //activacion del correo } </script> <head> <link rel="shortcut icon" href="/images/favicon.ico" /> <style type="text/css"> body { font-family: "Agency FB"; font-style: bold; color: black; background-color: #7c9fbf; } .cuadro { background-color: #FFFFFF; border: #666666; border-style: solid; border-top-width: 5px; border-right-width: 5px; border-bottom-width: 5px; border-left-width: 5px; border-color: #8ec1da; -moz-border-radius: 15px; margin:10px 10px 10px 10px; } </style> <title>Fast Click URL</title> </head> <body> <br> <br> <center> <img src="/images/logo3.png"</center> <br> <br> <table width="600" class="cuadro" align="center" style="font-size:40px;text-align:center"> <form name="registro" method="post" action="check.php"> <input type="hidden" name="js" value="0"> <tr> <td> Username: <br><input type="text" name="usuario" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri"> </td> </tr> <tr> <td> Password: <br><input type="password" name="pass" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri"> </td> </tr> <tr> <td> Repeat Password: <br> <input type="password" name="pass2" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri"> </td> </tr> <tr> <td> E-mail: <br> <input type="text" name="correo" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri"> </td> </tr> <tr> <td> Captcha code: <br> <input type="text" name="captchacode" width="80" class="cuadro" style="text-align:center;font-size:30px;font-family:Calibri"> </td> </tr> <tr> <td> <img src="captcha.php"> </tr> </td> EL CAPTCHA LLEGA ATRASADO, SIEMPRE LLEGA EL ANTERIOR <tr> <td> <script type="text/javascript"> document.write('</tr> </td><tr> <td> <center> <input type="button" width="80" onclick="validar()" value=" Register " style="text-align:center;font-size:30px;font-weight:bold;border-color:#2f57a9;background-color:#d9d9d9" class="cuadro"> </center> </tr></td> </tr>'); </script> <noscript> <td> <tr> <center> <input type="submit" width="80" value=" Register " style="text-align:center;font-size:30px;font-weight:bold;border-color:#2f57a9;background-color:#d9d9d9" class="cuadro"> </center> </tr> <td> </noscript> </form> </table> <table width="100" class="cuadro" align="center" style="font-size:30px;text-align:center;margin-top:10px"> <tr> <td> <a href="index.php"><img src="/images/arrow.png"></a> </td> </tr> </table> </head> </body>
He probado a resolverlo por mi mismo pero no lo consigo, el código que postee era todo el código JS y PHP. Ahora añado el HTML para que veas que no se como arreglarlo, a ver si se te ocurre algo. Saludos
|
|
|
En línea
|
Come to me when you have these eyes...
By more that you try it, a feather never will achieve to fly.
|
|
|
~ Yoya ~
Wiki
Desconectado
Mensajes: 1.125
|
No creo que vaya a leer todo el código xD, te toca pensarlo man.
|
|
|
En línea
|
Mi madre me dijo que estoy destinado a ser pobre toda la vida. Engineering is the art of balancing the benefits and drawbacks of any approach.
|
|
|
DarkItachi
Desconectado
Mensajes: 516
Itachi Uchiha
|
Porfavor, necesito ayuda, ¡no hay manera de conseguirlo! Saludos
|
|
|
En línea
|
Come to me when you have these eyes...
By more that you try it, a feather never will achieve to fly.
|
|
|
.mokk.
Desconectado
Mensajes: 177
|
Ya vi tu codigo y a como lo veo esque luego de dar click llamas la funcion y ahi todo bien pero al mismo tiempo recarga la web y ahi ya cambia de nuevo el valor. Bueno aqui te dejo mi codigo que tengo en mi web, puede que encuentres codigo demas, pero ahi puedes checar que luego de dar click al boton, el form no recarga, es lo primero que hace el code que si se le dio click haga el codigo sino muestra el form <?php if(isset($_POST['reset'])) { $user = clean($_POST['user']); $tmp = clean($_POST['captch']); { alertbox("No dejes espacios vacios","index.php?do=reset"); } if($tmp != $_SESSION['tmptxt']) { alertbox("El codigo es incorrecto","index.php?do=reset"); } $q = mssql_query("SELECT * FROM Account WHERE UserID='".$user."'"); { alertbox("El UserID No Existe","index.php?do=reset"); }else{ if($r->Code != 0 || $r->Code != ""){ alertbox("Ya Hay Un Codigo, Disponible en tu cuenta, revisa tu correo, Checa que podria estar en la zona Spam","index.php"); } } do{ $code = random1(40); $q = mssql_query("SELECT * FROM Login Where Code='".$code."'"); { $y = 1; }else{ $y = 0; } }while($y == 1); mssql_query("UPDATE Login SET CodeFecha=GETDATE(), Code='".$code."' WHERE AID='".$r->AID."'"); $texto = "Se te ha enviado un correo con la direccion donde podras cambiar tu contraseña, <br> Este Link Solo es valido 1 vez http://".getUrl()."/index.php?do=reset2&code=".$code."&aid=".$r->AID."<br>El codigo es valido por 15 dias"; enviarmail($r->Email,"Reset Contraseña",$texto); alertbox("Se te ha enviado un correo con las instrucciones para cambiar tu contraseña, El codigo es valido por 15 dias","index.php"); }else{ ?> <form name="resetz" method="post"> <center><font color="#00FF00"> Ingresa el UserID: <br> <input type="text" name="user"><br> Codigo de Verificacion:<br><br> <img src="./modulos/captcha.php" width="100" height="30" vspace="3"><br> <input type="text" name="captch"><br><br> <input type="submit" name="reset" value="Reset Contraseña"> </font></center> </form> <? } ?>[/php] captcha.php [code=php] <?php function randomText($length) { $pattern = "1234567890abcdefghijklmnopqrstuvwxyz"; for($i=0;$i<$length;$i++) { $key .= $pattern{rand(0,35)}; } return $key; } $_SESSION['tmptxt'] = randomText(8); imagestring($captcha, 5, 16, 7, $_SESSION['tmptxt'], $colText); header("Content-type: image/gif"); ?>
Espero te ayude si aun asi no puedes ahi te hecho una mano n_n[/code]
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[AYUDA]Script captcha
PHP
|
Adramelech
|
5
|
3,203
|
4 Septiembre 2008, 05:44 am
por Karman
|
|
|
[Ayuda] Bot que Leea Captcha
Programación Visual Basic
|
agus0
|
9
|
13,467
|
16 Noviembre 2009, 07:42 am
por kagure
|
|
|
VB.NET - Captcha a PictureBox - Ayuda porfavor
Scripting
|
ivanhack
|
0
|
3,389
|
12 Diciembre 2011, 17:36 pm
por ivanhack
|
|
|
VB.NET - Captcha a PictureBox - Ayuda porfavor
.NET (C#, VB.NET, ASP)
|
ivanhack
|
4
|
4,895
|
26 Diciembre 2011, 00:44 am
por ivanhack
|
|
|
ayuda para superar un captcha??
Dudas Generales
|
dea_65
|
6
|
2,879
|
26 Febrero 2019, 19:15 pm
por Machacador
|
|