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.";
}
}
//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);