Foros del Web » Programando para Internet » PHP »

captcha no coincide con la variable de sesion

Estas en el tema de captcha no coincide con la variable de sesion en el foro de PHP en Foros del Web. Hola estoy implementando un captcha, y tengo un problema, que en realidad no se si es problema o solo es un ajuste el que hay ...
  #1 (permalink)  
Antiguo 03/12/2011, 12:36
 
Fecha de Ingreso: junio-2010
Mensajes: 117
Antigüedad: 13 años, 10 meses
Puntos: 1
captcha no coincide con la variable de sesion

Hola estoy implementando un captcha, y tengo un problema, que en realidad no se si es problema o solo es un ajuste el que hay que hacer.
Cuando genero mi imagen captcha, guardo el código a escribir en la imagen en una sesión, para que al enviar el formulario pueda comparar lo que escribió el usuario con la sesión y si son iguales enviar el formulario, pero cuando comparo estos dos, nunca concuerdan, me he dado cuenta que el código que se escribe en la imagen no es el mismo que se guarda en la sesión, a pesar de guardar y escribir el código al mismo tiempo, y cada vez que actualizo el formulario lo que queda guardado en la sesión es el código que se escribió en la imagen anterior.
Les muestro el código que uso:

captcha.php

Código PHP:
<?php
session_start
();
$width  35;
$height 150;
function 
getCode($length){
    
$code 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
    
$codigo '';
    
$i 0;
    while (
$i $length) {
        
$codigo .= substr($codemt_rand(0strlen($code)-1), 1);
        
$i++;
    }
    return 
$codigo;
}

$_SESSION['captcha'] = getCode(6);

$image imagecreatetruecolor($height$width);
$width imagesx($image); 
$height imagesy($image);
$black imagecolorallocate($image000); 
$white imagecolorallocate($image255255255); 
$red imagecolorallocatealpha($image2550075); 
$green imagecolorallocatealpha($image0255075); 
$blue imagecolorallocatealpha($image0025575); 
imagefilledrectangle($image00$width$height$white); 
imagefilledellipse($imageceil(rand(5145)), ceil(rand(035)), 3030$red); 
imagefilledellipse($imageceil(rand(5145)), ceil(rand(035)), 3030$green); 
imagefilledellipse($imageceil(rand(5145)), ceil(rand(035)), 3030$blue); 
imagefilledrectangle($image00$width0$black); 
imagefilledrectangle($image$width 10$width 1$height 1$black); 
imagefilledrectangle($image000$height 1$black); 
imagefilledrectangle($image0$height 1$width$height 1$black); 
imagestring($image10intval(($width - (strlen($_SESSION['captcha']) * 9)) / 2),  intval(($height 15) / 2), $_SESSION['captcha'], $black);
header('Content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);
?>
en el formulario

Código PHP:
<b>Introduzca el c&oacute;digo en el cuadro de abajo:</b><br />
                                <input type="text" name="captcha" value="" />
                                <br />
                                <img src="captcha.php" id="captcha" />
                                <? echo $_SESSION['captcha'];?>

muchas gracias por sus respuestas, saludos
  #2 (permalink)  
Antiguo 03/12/2011, 13:16
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: captcha no coincide con la variable de sesion

No creo que sea el problema pero por las dudas probá
reemplazá <? por esto <?php
acá:
<? echo $_SESSION['captcha'];?>


podrías mostrar en donde haces la comparación
__________________
la la la
  #3 (permalink)  
Antiguo 03/12/2011, 13:24
 
Fecha de Ingreso: junio-2010
Mensajes: 117
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: captcha no coincide con la variable de sesion

Hola truman_truman, gracias por tu respuesta, cambie el <? por <?php no cambio en nada el resultado, aqui esta la parte del codigo donde hago la comparacion

Código PHP:
if ($_SESSION['captcha'] != $_POST['captcha']) {
    echo 
'Error: C&oacute;digo de verificaci&oacute;n no coincide con la imagen';

  #4 (permalink)  
Antiguo 03/12/2011, 14:26
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: captcha no coincide con la variable de sesion

el problema es que tenés que respetar nayusculas y minusculas en el texto ingresado

fijate en :
$code = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ1234567890';

que hay mayusculas y ninusculas, si no las querés solo sacaselas
__________________
la la la
  #5 (permalink)  
Antiguo 05/12/2011, 09:30
 
Fecha de Ingreso: junio-2010
Mensajes: 117
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: captcha no coincide con la variable de sesion

disculpa por no responder antes, creo que no explique bien lo que pasa, el problema no es en el post, el post del captcha esta bien con mayúsculas o minúsculas, el problema es que cuando imprimo el captcha y guardo el texto generado en la sesión me guarda el texto que se escribió en el captcha anterior (antes de volver a ejecutar el formulario), te muestro

el texto que tiene la imagen catpcha actual es: EJEYZI y la sesión tiene (nada, vacio)

si actualizo la pagina queda de esta manera:

el texto que tiene la imagen catpcha actual es: HWME0D y la sesion tiene EJEYZI

y si actualizo de nuevo queda asi:

el texto que tiene la imagen catpcha actual es: EWE3A1 y la sesion tiene HWME0D

no sé como es que cuando actualizo en la sesión se guarda el texto que se escribió antes

espero haberme explicado mejor, muchas gracias
  #6 (permalink)  
Antiguo 05/12/2011, 09:43
Avatar de Eleazan  
Fecha de Ingreso: abril-2008
Ubicación: Ibiza
Mensajes: 1.879
Antigüedad: 16 años
Puntos: 326
Respuesta: captcha no coincide con la variable de sesion

En mi humilde opinión, lo q pasa es lo siguiente:

1) Cargas la página del formulario (SESSION['capcha'] (a partir de ahora, SC), no existe!)
2) Cargas la imágen (Se crea el SC).
3) Actualizas (f5, por ejemplo) el formulario. Se carga el form, SC es el valor q tenia en 2
4) Se carga la imagen, SC será un valor nuevo
5) Actulazias el form, SC tiene el valor de 4
6) Se carga la imagen, SC tiene un nuevo valor.


En definitiva, se genera la variable de sesión después de cargar el formulario, y de ahí los problemas que tienes.

Esa es la impresión que tengo :)
__________________
>> Eleazan's Source
>> @Eleazan
  #7 (permalink)  
Antiguo 05/12/2011, 10:04
 
Fecha de Ingreso: junio-2010
Mensajes: 117
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: captcha no coincide con la variable de sesion

Hola Eleazan, inicié la variable de sesión antes de crear el captcha, pero sigue con el mismo resultado, no se si cree bien la variable:

session_start();
$_SESSION['captcha'];

y mas adelantes del código es cuando imprimo el captcha:

<img src="captcha.php" id="captcha" />
<?php print_r($_SESSION['captcha']);?>

muchas gracias por tu respuesta
  #8 (permalink)  
Antiguo 05/12/2011, 10:23
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: captcha no coincide con la variable de sesion

Exacto, debes de generar el captcha en la pagina del formulario y guardarlo en la sesión y después en la pagina que genera el captcha (la imagen) creas el captcha en base a esa variable de sesión.
  #9 (permalink)  
Antiguo 05/12/2011, 10:36
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: captcha no coincide con la variable de sesion

Yo tengo implementado este captcha, si analizás el código tal vez veas tu error

http://foros.emprear.com/php/captcha...atir-de-un-gif
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #10 (permalink)  
Antiguo 05/12/2011, 10:40
 
Fecha de Ingreso: junio-2010
Mensajes: 117
Antigüedad: 13 años, 10 meses
Puntos: 1
Respuesta: captcha no coincide con la variable de sesion

Tienes toda la razón, muchisimas gracias por su ayuda, ha quedado!!! Saludos

Etiquetas: captcha, formulario, variables, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:10.