Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/09/2006, 23:39
Avatar de shakaran
shakaran
 
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 18 años, 8 meses
Puntos: 7
Conflictos entre sesiones

Hola, tengo hecho un sistema de login (basado desde el de Cluster) y me funcionaba perfectamente. Luego quise hacer un Captcha (la tipica imagen del login.Info AQUÍ )mediante sesiones y currandomelo con distintas variaciones como de fuente, texto, posicion de letra, angulo, etc.

Pero exactamente no queria ponerlo en el login. Si no en un formulario de reporte de Bugs que tengo echo para una aplicacion.

Y aqui llega el problema. En el formulario quiero detectar si el usuario esta registrado y entonces el campo nombre e email se cargan y no hace falta rellenarlos. Si no esta registrado, lo detecta y debe rellenarlo(ya que el reporte seria de un anonimo).

Entonces, rellena su formulario y le aparece el tipico codigo del "Captcha" para rellenar. Este funciona con sesiones y si estan las sesiones del login no funcionan y si registro antes las del captcha, no funcionan las del login, es decir, un verdadero lio. He probado a meter y registrar las variables del captcha en el login, pero claro, entonces si no esta logeado, no funciona el captcha.

LLevo ya 2 dias a full con ello y leido 20 mil articulos de sesiones y captchas y no consigo arreglarlo, por ello acudo ya al genio de la lampara aqui en foros del web a ver si podemos arreglarlo. Pongo todos los codigos (resumidos y con las partes afectadas).

login.php
Código PHP:
//...imaginen la parte en la que se hacen todas las comprobaciones y validaciones del datos y luego

if($estalogeado==true)
{
session_name("app_login");
session_start();
session_cache_limiter('nocache,private');
$_SESSION['USER_ID']=$login['id'];
$_SESSION['uNick']=$login['nick'];
$_SESSION['uPass']=$login['password'];
//...ya estaria hecha la sesion del login y logeado
}
else
{
//los tipicos mensajes de error


formulario.php
Aqui se envian los datos de reporte(es donde esta el conflicto del captcha y el login)
Código PHP:
session_name("app_login");//Inicio la sesion del login
session_start();
if (!isset(
$_SESSION['uNick']) && !isset($_SESSION['uPass'])){
session_destroy();// Borramos la sesion si no hay nick ni pass (seria un anonimo)
}

//Registro el captcha
session_name("captcha");//Inicio la sesion del login
session_start();

//Ahora la parte del formulario

if(!isset($enviar))
{
       if(
ser_user($uNick,$uPass))
     {
//Una simple funcion que si esta logeado mira en la BD si es correcto
        
echo "Usuario: $uNick";//Como esta logeado ponemos el user
     
}
     else
     {
//No esta logeado
       
echo 'Usuario: 
          <input type="text" name="user" value="Introduce tu usuario">'
;
     }

     
//Ahora vendria el campo de asunto y descripcion y al final el captcha
     
echo "Codigo:"
     
//Envio la session del captcha para generar los caracteres
         
echo '<img src="img_captcha.php?SID">';
         
//Aqui recogemos el codigo que mete el usuario
         
echo'<input name="captcha_ingresado" type="text">';
     
//El tipico submit y demas
}
elseif(
$enviar)//Si envia el formulario
{
    
//Recogemos el caracter generado en la sesion
    
$caracter=$HTTP_SESSION_VARS['captcha']['caracter_session'];
    if(
$captcha_ingresado==$caracter)
    {
//Si coincide el codigo de captcha de usuario con el de sesion
        
echo "Usted ingreso el codigo correctamente.";
    }
    else {
        echo 
"El texto ingresado no coincide.";
    }

img_captcha.php
//Este fichero contiene todo el algoritmo que genera el captcha y devuelve una imagen
Código PHP:
//Creamos la imagen
$img=imagecreate(90,30);//Dimensiones del Captcha

//Le ponemos un fondo y demas
//Luego con un for generariamos los caracteres y demas codigo del captcha
//y nos queda una variable $caracter con un valor de caracteres como codigo //a introducir en el captcha, supongamos 4GH

$caracter="4GH";//Lo que nos devolveria el for y demas, lo simplifico aqui.

//Meto el codigo en una variable de sesion que luego la recogemos en el formulario
$_SESSION['captcha']['caracter_session']=$caracter;

//Devuelvo la imagen y termina ya esto
header("Content-type: image/png");
imagepng($img); 
Eso seria todo, pero hay bastantes conflictos, como os comentaba al principio y me tiene ya algo desesperao porque no se por donde atacarle, a ver si conseguis decirme alguna nueva linea de ataque para que me ponga a ello y lo solucione. Gracias
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net