Ver Mensaje Individual
  #5 (permalink)  
Antiguo 14/06/2006, 20:14
raul123
 
Fecha de Ingreso: septiembre-2005
Mensajes: 94
Antigüedad: 18 años, 7 meses
Puntos: 0
Autenticación usando Cookies en PHP

Bueno, después de un largo rato probando y probando con las cookies, ya parece que he encontrado una solución que funciona y parece tener sentido. Ruego me digáis si hay alguna incoherencia. Por ejemplo, me gustaría saber si es necesario que el nombre de la cookie sea igual al nombre de la sesión. O también ¿Hay que hacer la llamada a session_name(...) y session_start() en todos los momentos que yo la hago, o sobra alguna llamada? El código para autentificar usuarios es el siguiente (pongo el código completo)

Archivo donde se comprueba el usr/pwd introducidos en el formulario:
accesoControl.php
Código PHP:
<?
include("includes/conexionBBDD.php");
//Sentencia SQL para buscar un usuario con esos datos
$pwd $_POST["pwd"];
$pwd md5($pwd);
$userid $_POST["userid"];
$ssql "SELECT * FROM admin WHERE nombre='$userid' and pwd='$pwd' ";

//Ejecuto la sentencia
$rs mysql_query($ssql);

//vemos si el usuario y contrase&ntilde;a es váildo
//si la ejecución de la sentencia SQL nos da algún resultado
//es que si que existe esa conbinación usuario/contrase&ntilde;a
if ($row mysql_fetch_array($rs)){
        
//usuario y contrase&ntilde;a válidos
        //defino una sesion y guardo datos
        
session_name("misitio");
                
session_start();
        
        
//sesión con cookies
        
$nombreCookie 'miCookie';
        
//creamos un número aleatorio entre 0 y el nº de segs del momento actual, y le aplicamos md5
        
$valorCookie md5(rand(0,time()));
        
        
//asignamos una validez a la cookie de 1 hora
        
$tActual time(); //marca de tiempo en segundos
        
$tActualMasUnaHora $tActual 3600 //sumamos 1 hora (3600s)
        
$validezCookie $tActualMasUnaHora;
        
        
//creamos la cookie
        
setcookie($nombreCookie,$valorCookie,$validezCookie);
        
//asignamos un identificador de sesión
        
$_SESSION["sessionID"]=$valorCookie;
        
///////
                //damos acceso al sitio restringido
        
$url="Location: sitioRestringido.php";
                
header ($url);

}else {
    
//si no existe le mando otra vez a la portada
    
header("Location: acceso.php?err=usr");
    exit();
    
}
mysql_free_result($rs);
mysql_close($conn); 
?>

Archivo que hay que incluir al principio de cada .php que queramos restringir
seguridad.php
Código PHP:
<?
//Inicio la sesión
session_name('misitio');
session_start();
$valorCookie $_COOKIE["miCookie"];


if(!(
$_SESSION["sessionID"] == $valorCookie) || 
          !(isset(
$_SESSION["sessionID"]))){
    
session_unset();
    
//destruimos la variable de sesión
    
$_SESSION= array();
    
//destruimos la posible cookie
    
setcookie('miCookie','',time()-3600);
    
session_destroy();
//volvemos a la pagina donde se pide usr/pwd
    
header("Location: acceso.php");
    exit();
}

?>
Archivo para salir de la zona restringida y cerrar la sesión
salir.php

Código PHP:
<?
session_name
('misitio');
session_start();
//destruimos la sesión
session_unset();
//limpiamos el array de $_SESSION de posibles valores residuales
$_SESSION = array();

//destruimos la posible cookie
setcookie('miCookie','',time()-3600);

session_destroy();
header ("Location: index.php");
?>