Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2005, 19:01
Tigervlc
 
Fecha de Ingreso: mayo-2003
Mensajes: 527
Antigüedad: 21 años
Puntos: 3
Problema con las cookies

Tengo implementado un sistema de registro de usuarios con sesiones que me funciona perfectamente, pero ahora tocaba añadir la opción, mediante una casilla de verificación, de que el usuario quiera que se le recuerde el login y password en su equipo, y claro, lo ideal es hacerlo con cookies.

Pues me estoy haciendo un lío y no consigo hacer que funcione. Tal vez esté planteándolo mal. Os comento más o menos cómo lo hago:

Primero hago una lectura de SID, si la hay, y una condición que se cumple si se acaba de hacer un log in:

Código PHP:
@$us_registrado $_SESSION['us_registrado'];
if (isset(
$_POST["log_in"]) && isset($_POST["password"]))
// Se acaba de enviar el formulario de log in
{
     ..... 
// Conexión base de datos y validar usuario
           // Si casilla "recordar" activada, guardar una cookie:
          
if (isset($_POST["recordar"])) {
                
setcookie('loginMiWeb',"$log_in,$password",false);
            }


Dentro de la condición externa, también dependerá que se cree la sesión o no si el usuario es válido, mediante $_SESSION['us_registrado'] = $log_in;

Y lo que más quiero remarcar de dentro de esta condición, porque lo que me falla es la cookie, es si en el formulario se ha activado la casilla "recordar", poner una cookie en el equipo. Lo reescribo de nuevo pero la he escrito arriba, el if interno:

Código PHP:
if (isset($_POST["recordar"])) {
                
setcookie('loginMiWeb',"$log_in,$password",false);
            } 
Tras la condición principal, otra condición que comprueba si ya había una sesión creada y aún no se ha hecho la desconexión. Si es así, se muestra el usuario conectado y el botón de desconexión:

Código PHP:
if (isset($_SESSION['us_registrado']) && !isset($_POST["desconectar"])) 
{
... 
// Mostrar usuario conectado y botón de log out

Y tras este segundo if, un else con tres if's anidados que comprueban:
1- Si se ha hecho log out, con lo que se hace un unset para destruir la sesión.
2- Si el usuario no es válido, indicándolo en pantalla.
3- La opción por defecto: usuario desconectado o no registrado.

Si se da el else arriba remarcado en negrita, se ha de mostrar junto con una de esas tres subcondiciones el formulario de conexión/registro nuevo usuario (por tanto se mostrará si el usuario acaba de hacer log out, si no es válido, o si no ha hecho login o no está registrado).

Pues el quid de la cuestión es lo que hago después en el formulario mediante HTML+PHP para que aparezcan los valores de log_in y password en el caso de que se haya marcado la opción recordar: (pongo sólo el ejemplo del campo log_in o nombre de usuario para acortar y porque es análogo al del password)

Código PHP:
<input name="log_in" type="text" size="15" value="<?php if (isset($_COOKIE["loginMiWeb"])) 
                { 
                
$partes explode(',',$_COOKIE["loginMiWeb"]);
                echo 
$partes[0];
                }
                
?>"/>
Lo del explode() lo hago porque en el valor de la cookie si veis arriba almaceno el log_in y el password separados por una coma, y explode() lo que hace es almacenar en elementos de un array las subcadenas de la cadena pasada separadas por el separador especificado (en este caso la coma).Para obtener el log_in leo $partes[0], y para ontener el password leería $partes[1].

Bien, alguien bien entendido en esto me puede decir si hago algo mal qué es? o la mejor forma de hacerlo? Venga chicos, una ayudita!