Foros del Web » Programando para Internet » PHP »

Conflictos entre sesiones

Estas en el tema de Conflictos entre sesiones en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 17/09/2006, 23:39
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 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
  #2 (permalink)  
Antiguo 18/09/2006, 10:55
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Nadie puede ayudarme??
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #3 (permalink)  
Antiguo 18/09/2006, 11:30
 
Fecha de Ingreso: junio-2006
Mensajes: 14
Antigüedad: 18 años, 5 meses
Puntos: 0
hola, no se si te sere de gran ayuda, ya que yo tb ando pegandome con las sesiones, y tb tengo problemas, pero he descubierto que en un archovo en el que asignas o obtienes variables de sesion lo primero que tienes que poner es session_start(), al principio de todo.
y he visto que en un lao lo tienes dentro de un if, en otro lao lo tienes dos veces , pero no arriba, y en el otro lao no lo tienes, piensa que es como un require_once.pero ponlo lo primero, antes que cualquier require_once. y luego maneja las variables de sesion como lo haces.

No se si sera eso, pero prueba.un saludo.
  #4 (permalink)  
Antiguo 18/09/2006, 14:21
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
El problema es que inicio 2 sesiones (hay 2 session_name()) y luego tengo que inicializarlas de algun modo, y claro no se si se pueden meter 2 session_start(). Hay muy pocos ejemplos y casi todos de siempre lo mismo. Y no he visto ninguno que combine un captcha con un login (si alguien lo encuentra que por favor me lo pase).
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #5 (permalink)  
Antiguo 19/09/2006, 14:01
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Ninguna respuesta mas? XD Espero que haya algun "genio" de la lampara XD
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #6 (permalink)  
Antiguo 19/09/2006, 16:40
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por shakaran Ver Mensaje
El problema es que inicio 2 sesiones (hay 2 session_name()) y luego tengo que inicializarlas de algun modo, y claro no se si se pueden meter 2 session_start(). Hay muy pocos ejemplos y casi todos de siempre lo mismo. Y no he visto ninguno que combine un captcha con un login (si alguien lo encuentra que por favor me lo pase).
En un mismo script no puedes manejar dos sesiones, por mucho que las tengas definidas así idenpendientemente bajo un nombre de sesión dado fijo que tu defines usando session_name()

No entiendo de donde salen tus dos "sesiones" .. (y no las veo, veo sólo variables de sesión definidas para una misma sesión). Si dices tener otro sistema de "login" por médio; indica su código completo .. por ejemplo no se observa como trabajas las sesiones y tu ya haces uso de un nombre exclusivo vía session_name() ...

Intenta explicar más detalladamente tu proceso, sino lo que tu necesitarías no es un "genio" sino un "adivino".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 20/09/2006, 01:07
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Es lo que quiero aclarar, ya que no puedo usar 2 sesiones en un mismo script, necesito unificar de alguna manera el sistema de login de sesiones con las variables de captcha de sesion.

Explico mas detalladamente lo que pretendo:

La aplicacion, tiene un sistema de login. El usuario hace su registro, se ingresa en la base de datos y le aparece el formulario de logeo. En ese momento entran a funcionar las variables de sesion del login. Cuando este de logea llama al fichero login.php donde inicializa la sesion y le pone un name.

Hasta ahi todo me funciona correctamente. El problema me surgio cuando necesitaba tener las variables de sesion activas y declaradas (para identificar si el usuario estaba registrado) y por otro lado, tener mas variables de sesion para hacer funcionar el captcha.

Cluster, los ficheros te los envio por privado ;). No se si te funcionara todo correctamente ya que tienen dependencias de CSS y otros archivos.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #8 (permalink)  
Antiguo 20/09/2006, 06:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Cluster, los ficheros te los envio por privado ;). No se si te funcionara todo correctamente ya que tienen dependencias de CSS y otros archivos.
Por privado te respondí que resumas tu código .. o lo expongas todo públicamente. Cualquier persona podría ayudarte.

Te doy algunas recomendaciones:
Si dices que uno de tus sistemas define un nombre de sesión própio con session_name() ..revisa que el otro sistema defina nombre de sesión própio también con session_name() y el -mismo- nombre que el otro sistema. O bien, -quita- la definicióin de nombre de sesión y deja que PHP use el nombre por defecto que dá a toda sesión creada ya que tu objetivo aquí es el de "unificicar" ambos sistemas.

Fijate y ten cuidado que nombres de variables no se solapen (que no tengan el mismo nombre) .. sino tendrás problemas por ese punto.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 20/09/2006 a las 06:38
  #9 (permalink)  
Antiguo 22/09/2006, 15:39
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Perdon por el retraso en responder, pero la universidad me tiene atareado XD.

Cluster, hice caso de tu consejo, respecto a los session_name() y los defini para el mismo, revise todo el codigo y lo reordene...y ta chan! El genio de la lampara me concedio el primer deseo, que funcionara el sistema del login con el del captcha.

Sin embargo parece ser que no actualiza bien el captcha y quiero que veais el formulario "online" para ver lo exotico de lo que me pasa. He puesto en las variables de sesion de ID,nick y pass un usuario por defecto de prueba que tengo en la bd, para ver que funcionaba el sistema de login y el captcha, cuando accedais se carga esa session con los parametros de prueba y el captcha generara una imagen con un codigo.

He hecho un echo con el valor que se genera y luego otro con el que se mete a la session, pero curiosamente, si envias el formulario (escribiendo el codigo del captcha bien o mal) y luego vuelves (con el boton volver que es como un link al mismo fichero, nada de history.back() ni esas cosas), pues el codigo que se genera y el introducido en sesion(que esta bien, porque al introducirlo bien o mal se debe generar uno nuevo), pues no coincide con el del captcha. Pero a la segunda vez que lo haces si coincide.

O sea una vez funciona y otra no. Alguna idea de que puede ser?

El link del formulario online es:
http://www.play.apogeusone.com/apo_bugtracker.php

Haced la prueba y veis lo raro que os digo.
Un saludo
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #10 (permalink)  
Antiguo 22/09/2006, 16:01
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Realmente ese mensaje que dás de "caracter generado y caracter en la sesión" no sé como lo haces (podrías indicar el codigo que afecta a esa parte por lo menos).

pero .. te comento que NO es cierto que.

<?
session_name("algo");
session_start();

$variable="QSD";
$_SESSION['codigo']=$vaiable;

Si tu haces echo $variable en ese punto y echo a $_SESSION['codigo'] .. el valor es el mismo pero realmente NO es el valor de lo que la variabel de sesión va a almacenar o almacene.

Las sesiones sólo quedan disponibles cuando se genera una petición al servidor o recarga de página en general . .es ahí cuando se "envian" al servidor y se registran (Graban).

Cita:
He hecho un echo con el valor que se genera y luego otro con el que se mete a la session, pero curiosamente, si envias el formulario (escribiendo el codigo del captcha bien o mal) y luego vuelves (con el boton volver que es como un link al mismo fichero, nada de history.back() ni esas cosas), pues el codigo que se genera y el introducido en sesion(que esta bien, porque al introducirlo bien o mal se debe generar uno nuevo), pues no coincide con el del captcha. Pero a la segunda vez que lo haces si coincide.
Parece que el valor en tu sesión queda en mayusculas todo .. y así no coincide nunca?.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #11 (permalink)  
Antiguo 22/09/2006, 16:16
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Cita:
Iniciado por Cluster Ver Mensaje
Realmente ese mensaje que dás de "caracter generado y caracter en la sesión" no sé como lo haces (podrías indicar el codigo que afecta a esa parte por lo menos).
Creo que no es una parte "sensible" del codigo y que tambien puede ayudar a otros a crear un algoritmo basandose en este o simplemente aprender de el.

Lo que hago es simplemente llamar a una funcion para que me genere los caracteres y luego meterlos en la sesion, en la misma funcion se hace el echo de las variables.

Código PHP:
function crear_captcha()
{
        
$caracterf="";//Inicializamos una variable variable
        
$lista_cararacteres="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        
$ncaracter strlen($lista_cararacteres);//Numero de caracteres
        
        
for($i=1;$i<= 3;$i++)
        {
//Generamos 3 caracteres aleatorios
            
$k=mt_rand(0,$ncaracter-1);//Indice de caracteres
            
$caracterf.=$lista_cararacteres[$k];
        }
        echo 
"Caracter generado: $caracterf<br>";
        
$_SESSION["captcha_bug"]=$caracterf;
        echo 
"Caracter en la session: ".$_SESSION["captcha_bug"]."<br>";

Cita:
Iniciado por Cluster Ver Mensaje
pero .. te comento que NO es cierto que.

<?
session_name("algo");
session_start();

$variable="QSD";
$_SESSION['codigo']=$vaiable;

Si tu haces echo $variable en ese punto y echo a $_SESSION['codigo'] .. el valor es el mismo pero realmente NO es el valor de lo que la variabel de sesión va a almacenar o almacene.

Las sesiones sólo quedan disponibles cuando se genera una petición al servidor o recarga de página en general . .es ahí cuando se "envian" al servidor y se registran (Graban).
Umn...interesante, desconocia el proceso...eso puede explicar el porque unas veces funcione y otras no...pero en realidad no se si afecta ya que paso el SID mediante la llamada a la imagen y supuestamente se "graba" en esa pagina que posteriormente devuelve una imagen. En tal caso de que el problema erradicara aqui, por donde puedo abordar el problema?



Cita:
Iniciado por Cluster Ver Mensaje
No sé si ya lo solucionastes .. pero a mi me funcionó correctamente, metí el "captcha" correcto .. me dijo tu sistema que todo OK (me puso el mismo código generado para la sesión y el capcha) y luego al volver con tu botón se generó otro código.Las sesiones sólo quedan disponibles cuando se genera una petición al servidor o recarga de página en general . .es ahí cuando se "envian" al servidor y se registran (Graban).
Prueba a hacerlo 4 veces metiendolo bien y 4 despues mediendolo mal. Si en todas las ocasiones luego te vuelve a generar un captcha bien, me quito la gorra, porque funciona en otros ordenadores menos en el mio XDD
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #12 (permalink)  
Antiguo 22/09/2006, 18:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Ok .. pero a esa función crear_captcha() como la llamas?

Te basas en que $_SESSION es un array superglobal (oK), pero antes de llamar a esa función tienes que haber iniciado la sesión .. Supongo que esto lo harás .. pero no está de más confirmarlo. (Por qué siempre que uno tiene problemas se expone el código "en porciones" que dejan todo fuera de contexto? ..). Tal vez con todo el código que usas a la mano alguien pueda darse el animo de probarlo y contarte sus experiencias bajo sus condiciones de pruebas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 23/09/2006, 05:56
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Bueno, expongo todo el codigo no tengo problema en ello, es mas, me gusta exponer el codigo que hago (siempre que no afecte a temas de seguridad) como otros programadores lo hacen ya que aprendemos mucho unos de otros.

Código PHP:
<?
$login_name
="apologin";// Usamos la sesion de nombre definido.
session_name($login_name);// Iniciamos el uso de sesiones
session_start();

$_SESSION['cokkNick']="prueba";
$_SESSION['cokkPass']="imaginaros un password aqui";
$_SESSION['USER_ID']="imaginaros una id de usuario aqui";

function 
crear_captcha()
{
        
$caracterf="";//Inicializamos la variable de sesion
        
$lista_cararacteres="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        
$ncaracter strlen($lista_cararacteres);//Numero de caracteres
        
        
for($i=1;$i<= 3;$i++)
        {
//Generamos 3 caracteres aleatorios
            
$k=mt_rand(0,$ncaracter-1);//Indice de caracteres
            
$caracterf.=$lista_cararacteres[$k];
        }
        echo 
"Caracter generado: $caracterf<br>";
        
$_SESSION["captcha_bug"]=$caracterf;
        echo 
"Caracter en la session: ".$_SESSION["captcha_bug"]."<br>";
}

if(!isset(
$enviar))
{    
crear_captcha();
?>

<form action="apo_bugtracker.php" method="post">
<table border="0" cellspacing="0" cellpadding="0" align="center">
  <tr>
    <td width="17" height="7" background="images/tablas/up_left.gif">
    <td height="7" colspan="3" background="images/tablas/up.gif"></td>
  <td width="7" height="7" background="images/tablas/up_right.gif">  </tr>
  <tr>
    <td width="17" background="images/tablas/left.gif">
    <td colspan="3" class="f1"><div style="text-indent:20px" align="justify">El BugTracker es un sistema  ideado para que los usuarios de Apogeus, puedan informar de bugs (fallos), sugerir nuevas ideas, modificar algo ya propuesto o alertar de una posible inseguridad del sistema.
    De esta forma ganamos todos, ya que todos los asuntos est&aacute;n centralizados. Asi programadores y guionistas estamos siempre bien informados de las tareas pendientes.<br>
    <br></div>
    <div style="text-indent:20px" align="justify">Si has descubierto un bug o quieres aportar una nueva sugerencia, idea o modificaci&oacute;n, por favor rellena el formulario siguiente: </div>    </td>
  <td width="7" background="images/tablas/right.gif">  </tr>
  <? 
       
if(ser_user($cokkNick,$cokkPass))
     {
         
$usuario=$cokkNick;
         
$email=idtomail($USER_ID);
    
?>
  <tr>
    <td width="17" background="images/tablas/left.gif">  
    <td width="100" class="f1">Usuario:</td>
    <td colspan="2" class="f2"><? echo $usuario;?></td>
  <td background="images/tablas/right.gif">  </tr>
  <tr>
    <td width="17" background="images/tablas/left.gif">  
    <td width="100" class="f1">Email:</td>
    <td colspan="2" class="f2"><? echo $email;?></td>
  <td background="images/tablas/right.gif">  </tr>
  <?
     
}
     else
     {
//Si es un usuario anonimo
  
?>
  <tr>
    <td width="17" background="images/tablas/left.gif">  
    <td width="100" class="f1">Usuario:</td>
    <td colspan="2" class="f2"><input type="text" class="c" name="usuario" size="20" maxlength="20"></td>
  <td background="images/tablas/right.gif">  </tr>
  <tr>
    <td width="17" background="images/tablas/left.gif">  
    <td width="100" class="f1">Email:</td>
    <td colspan="2" class="f2"><input type="text" class="c" name="email" size="40" maxlength="40"></td>
  <td background="images/tablas/right.gif">  </tr>
  <?
     
}
  
?>

  <tr>
    <td width="17" background="images/tablas/left.gif">  
    <td width="100" class="f1">Asunto:</td>
    <td colspan="2" class="f2"><input type="text" class="c" name="asunto" size="80" maxlength="255"></td>
  <td background="images/tablas/right.gif">  </tr>
  <tr>
    <td width="17" background="images/tablas/left.gif">  
    <td class="f1" style="vertical-align:top;">Descripci&oacute;n:</td>
    <td colspan="2" class="f2"><textarea class="carea" rows="10" cols="90" name="descripcion"></textarea></td>
  <td background="images/tablas/right.gif">  </tr>
  <tr>
    <td background="images/tablas/left.gif"> 
<td class="f1"><div align="center">Codigo:</div>            </td>
    <td width="126" class="f2"><div style="background-image:url(tabla_captcha.png);width:113px;height:49px;">
          <div style="position:relative;left:11px;width:90px;height:30px; top:10px;">
            <div align="center"><img src="apo_img_captcha.php?<?php echo SID?>" width="90" height="30" border="0">              </div>
          </div>
        </div></td>
    <td width="658" class="f2"><input name="captcha_ingresado" class="c"type="text" id="captcha_ingresado" size="7" maxlength="3" />
      <a href="#" onclick="Popup()"><img style="vertical-align:middle"src="images/help.gif" border="0" /></a></td>
    <td background="images/tablas/right.gif">  </tr>
  <tr>
    <td background="images/tablas/left.gif">  
    <td colspan="3" class="f1" style="vertical-align:top;"><div align="center">
      <input type="submit" name="enviar" class="b" value="Enviar">
    </div></td>
    <td background="images/tablas/right.gif">  </tr>
  <tr>
    <td width="17" height="7" background="images/tablas/down_left.gif">
    <td height="7" colspan="3" background="images/tablas/down.gif"></td>
  <td width="7" height="7" background="images/tablas/down_right.gif">  </tr>
</table>
</form>

<?
}
else
{
echo 
"INGRESADO=$captcha_ingresado<br>";
    echo 
"CARACTER Sesion=".$_SESSION["captcha_bug"]."<br>";;
    if(
$captcha_ingresado==$captcha_bug)
    {
        echo 
"Usted ingreso el codigo correctamente.<br>";
    } 
    else
    {
        echo 
"El texto ingresado no coincide. Por favor intentelo de nuevo!<br>";
    }
}
Bueno, ya esta todo el codigo, como veis no es nada del otro mundo.

Entonces cual es el problema de que "algunas" veces no funcione bien mi captcha? Si haceis la prueba, metiendo bien el codigo unas 4 veces(para ver que sale distinto a los echo) y igual metiendolo mal, vereis a lo que me refiero.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #14 (permalink)  
Antiguo 24/09/2006, 07:01
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Alguna solucion?
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #15 (permalink)  
Antiguo 24/09/2006, 10:17
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Soy muy cabezon y no me rindo XD. Asi que he estado haciendo pruebas en diferentes navegadores...en el IE, funciona bien, en el Opera bien...pero en Mozilla, me pasa el error de que no coincidia la imagen con el codigo generado...y entonces se me ha ocurrido una hipotesis de lo que esta pasando.

El codigo se genera bien, pero la imagen se muestra mal, luego el problema reside en la imagen y no en las sesiones. Pensando, podemos deducir que la imagen que queda es la anterior en el cache, y mozilla, no actualiza esa imagen todas la veces(de ahi que unas veces vaya y otras no). La solucion que he pensado es que la imagen no se guarde en cache, pero claro necesito ayuda para esto y que alguien me informe de como se hace.

lo que hago en el archivo donde se genera la image, es crear una imagen, ponerle las fuentes y colores y 3 letras al azar y al final devuelvo este header de imagen:
Código PHP:
header("Content-type: image/png");
imagepng($img); 
La unicas formas que conozco de que no se cachee una imagen es por METAS, pero no se si aqui sea aplicable. Me podeis ayudar?
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #16 (permalink)  
Antiguo 24/09/2006, 11:13
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Si crees que el problema es con la imagen .. tal vez que estás viendo la imagen anterior de una caché, puedes aplicar esta solución:

Cita:
User Contributed Notes
header
digideath at web dot de
24-Aug-2006 03:38
Hello,

i have found a working method for IE Cache BUG, it's not the best but it is working on all IE's in our Company..

i send only the http/1.x 205 OK header additionaly to the rest of the anti cache bug header things (;

and it is working! (:

Código PHP:
<?php
//[HTTP_USER_AGENT] => Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
if(!strpos(strtolower($_SERVER[HTTP_USER_AGENT]), "msie") === FALSE)
{
   
header("HTTP/1.x 205 OK");
} else {
   
header("HTTP/1.x 200 OK");
}

header("Pragma: no-cache");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum aus Vergangenheit
//header("Expires: -1");
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");  // immer geändert
//header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
header("Cache-Control: no-cache, cachehack=".time());
header("Cache-Control: no-store, must-revalidate");
header("Cache-Control: post-check=-1, pre-check=-1"false);
Y luego el resto de tus cabeceras y código:
Código PHP:
header("Content-type: image/png"); 
Prueba primero eso. Si eso no resulta podrías definir nombre a la imagen creada, eso sí, siempre diferente. En ese caso puedes usar como nombre de la imagen el código que generas (que es aleatorio ya de por sí).

Código PHP:
header('Content-Disposition: inline; filename="'.$codigo_generado.'.png"'); 
Revisa más comentarios al respecto en:

http://www.php.net/header
(en los comentarios de los usuarios de esa función)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #17 (permalink)  
Antiguo 29/09/2006, 14:51
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Perdon por la tardanza (la uni entre semana me consume mis ratos libres) XD

He probado las dos alternativas y creo que funciona a la perfeccion, ya que tras probarlo unas 15 veces, no me ha guardado ninguna imagen anterior, ademas de ser mas eficiente el codigo generado por la imagen, puesto que el nombre ahora, es un numero aleatorio.

Creo que mi problema ha sido perfectamente solucionado. Te doy mil gracias Cluster, una vez mas ha sido muy profesional en tus respuestas.

Un saludo
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #18 (permalink)  
Antiguo 29/09/2006, 16:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por shakaran Ver Mensaje
Perdon por la tardanza (la uni entre semana me consume mis ratos libres) XD

He probado las dos alternativas y creo que funciona a la perfeccion, ya que tras probarlo unas 15 veces, no me ha guardado ninguna imagen anterior, ademas de ser mas eficiente el codigo generado por la imagen, puesto que el nombre ahora, es un numero aleatorio.

Creo que mi problema ha sido perfectamente solucionado. Te doy mil gracias Cluster, una vez mas ha sido muy profesional en tus respuestas.

Un saludo
Aprovechando el tema ... recientemente vi un poco más sobre el protocolo HTTP, ahora entendí mejor las cabeceras HTTP que expuse antes en mi "cut-and-paste".

Pare que la grácia de no hacer caché de las imagenes lo hace la cabecera:

Cache-Control: no-store

Podrías probar una cosa. Revisa tus "temporales" a ver como trabajan y si se crean esas imagenes o no permanecen más que cuando las usas. Así podrías dejar nombre fijo a tus imagenes generadas:

header('Content-Disposition: inline; filename="nose.png"');

El objetivo es "no saturar" a los clientes (PC's) con ese montón de imagenes de distinto nombre generadas.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #19 (permalink)  
Antiguo 29/09/2006, 16:23
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
Umn...claro, no habia contemplado el inconveniente de generar tantas imagenes ;) (una gran saturacion para el usuario).

Pero parece ser que no se guardan en los temporales aunque le ponga un nombre aleatorio ya que no se queda ninguna en el cache con la instruccion que me comentas de "no-store"(no-almacenar) .

Me estas diciendo que con:

Código PHP:
header("Cache-Control: no-store");
header("Content-type: image/png");

header("Content-Disposition: inline; filename=imgcaptcha.png"); 
solo estas lineas harian lo mismo?

Por otro lado, no entiendo muy bien que hace exactamente la instruccion:

Content-Disposition: inline

Hay mas variantes del Content-Disposition?
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
  #20 (permalink)  
Antiguo 29/09/2006, 19:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Me estas diciendo que con:


Código PHP:
header("Cache-Control: no-store");
header("Content-type: image/png");

header("Content-Disposition: inline; filename=imgcaptcha.png");

solo estas lineas harian lo mismo?
Si, haría lo mismo .. En tu caso te dá igual .. tu ya generas un "ID" único y aleatorio que puedes usar como nombre de imagen, pero en otros casos no podría ser así .. y deberías invertir tiempo y proceso en generar dicho "ID" para usarlo como nombre de archivo. Si la cabecera HTTP en cuestión se comporta como dice y no deja rastros en las "caché ni temporales": mejor todavía.

Cita:
Por otro lado, no entiendo muy bien que hace exactamente la instruccion:

Content-Disposition: inline

Hay mas variantes del Content-Disposition?
Ya te decía que esto es parte del "Protocolo HTTP". Que me acuerde (pues el protocolo HTTP es bien extenso ..) para "Content-Disposition" hay dos tipos: "inline" y "attachment". La primera indica "ver en línea" (sobre el navaegador/cliente si este puede interpretarla como suele ser imagenes tipo PNG, JPG y GIF como standares). El "Attachment" indica al navegador "esto es para que lo descagues" (independiente de que puedas verlo en línea por qué tenga tal o cual plug-in istalado o lo haga por defecto).

Te interesa más el tema, revisa las RFC's del manual oficial del protocolo HTTP y veras cosas más interesantes.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #21 (permalink)  
Antiguo 30/09/2006, 12:09
Avatar de shakaran  
Fecha de Ingreso: agosto-2005
Ubicación: España - Ciudad Real
Mensajes: 374
Antigüedad: 19 años, 3 meses
Puntos: 7
http://www.faqs.org/rfcs/rfc1806.html

Gracias encontre toda la info al respecto ;)

Desconocia que era un RFC, pero ahora ya se lo que es y para lo que sirven.

Un saludo.
__________________
Quijost Backend Engineer - www.quijost.com - Hosting rápido, eficiente y profesional
Blog: www.shakaran.net
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 21:21.