Ver Mensaje Individual
  #1 (permalink)  
Antiguo 02/11/2012, 06:00
erchavalin
Invitado
 
Mensajes: n/a
Puntos:
Exclamación Problema con Cookies solo en Firefox e Internet Explorer

Buenas,

Estoy haciendo un panel de administración con un sistema de login. Todo funciona perfectamente, pero al ejecutarlo desde Firefox o Internet Explorer no funciona.

El problema es el siguente: solo en Chrome se genera la cookie, he comprobado que Firefox e IE tienen las cookies habilitadas.

Que puede estar fallando?
Esta es la función de login
Código PHP:
        /**
     * Comprueba si el usuario y clave son correctos, en caso de serlo genera un session y una cookie "salteada".
     * @global string $salt
     * @global string $saltCookie
     * @param string $user
     * @param string $pass
     *
     * @return int estado 
     */
    
function login ($user,$pass)
    {
       
        
$user = mysql_escape_string($user);
        
$pass = mysql_escape_string($pass);   
        if(
strlen($user)<4 || strlen($pass)<4) return -3;
        global 
$salt;
        
$pass = sha1($salt.md5($pass));
        global 
$hostsql;
        global 
$usersql;
        global 
$passwdsql;
        
$conexion=mysql_connect($hostsql, $usersql,$passwdsql ,false);
        
$bd = mysql_select_db(DATABASENAME,$conexion);
        
mysql_query("SET NAMES 'utf8'");
        
$sql = "select user_id from user_log where UPPER(username)='".strtoupper($user)."' and passwd='".$pass."'";
        
$result = mysql_query($sql,$conexion);
        if(
mysql_affected_rows()<=0 || !$result) return -1; //user repetido   
        
$row = mysql_fetch_array($result);
        
$user_id = $row['user_id'];
        
$_SESSION['usuario']=$user_id;
        global 
$saltCookie;
        
$cookie = sha1($saltCookie.md5($user_id.date("Y-d-m h:i:s")));
         
setcookie("admin",$cookie,time()+3600);
        
$loginin = date("Y-m-d H:i:s");
        
$sql2 = "update user_log set cookie='".$cookie."',sesion='" . $loginin . "' where `user_id`='".$user_id."'";
        
$result2 = mysql_query($sql2,$conexion);
         
$_SESSION['usuario']=$user_id;
        
        return 
true;
    } 
Si el login es correcto, la pequeña función seguridadIndex comprueba si la cookie es válida y redirecciona al panel:

Código PHP:
function seguridadIndex()
{
    
    if (isset(
$_SESSION['usuario']))
    {
        
        
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/editor/");
        exit();

    }
    else if( isset(
$_COOKIE['identificado']))
    {     
        
$cookie = limpiar($_COOKIE['identificado']);
        
$user_id = comprobarCookie($cookie);
        if(
$user_id)
        {
            
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/editor/");
            exit();
        }
    }
} 

El resto de funciones del panel utilizan esta función para la seguridad
Código PHP:
    function seguridad(){

    if (isset(
$_SESSION['usuario']))
    {
    global 
$hostsql;
    global 
$usersql;
    global 
$passwdsql;
    
$conexion=mysql_connect($hostsql, $usersql,$passwdsql ,false);
    
$bd = mysql_select_db(DATABASENAME,$conexion);
    
mysql_query("SET NAMES 'utf8'");
    
$userid = $_SESSION['usuario'];
    
$sql = "SELECT cookie FROM user_log where user_id='". $userid ."'";
    
$result = mysql_query($sql,$conexion);
    if(!
$result || mysql_affected_rows()<1) {
        
forcelogout();
    }
    else {
    
$row = mysql_fetch_array($result);
    if (
$row ['cookie'] == $_COOKIE['admin']) {
        return;
    }
    else {
        
forcelogout();
    }
    }

    }
    else if( isset(
$_COOKIE['admin']))
    {     
        
$cookie = limpiar($_COOKIE['admin']);
        
$user_id = comprobarCookie($cookie);
        if(!
$user_id)
        {
            
forcelogout();
            exit();
        }
    }
    else
    {
        
forcelogout();
        exit();
    }
       
} 
La función forcelogout elimina la sesión e invalida la cookie:

Código PHP:
    function forcelogout() {

    
session_start ();
        
    
$_SESSION = array();
 
    
    
$session_name = session_name();
 
    
    unset(
$_SESSION['usuario']);
 
    
    
session_destroy();
 
    
    if ( isset( 
$_COOKIE[ $session_name ] ) ) {
        
setcookie($session_name, '', time()-3600, '/');   
    }
    if(isset(
$_COOKIE['admin'])){
        
setcookie('admin', '', time()-3600, '/'); 
    }
    
header("Location: http://" . $_SERVER['HTTP_HOST'] . "/login/index.php");
    exit();


} 
¿Cuál puede ser el problema?

Muchas gracias de antemano por vuestro tiempo