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)<|| 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()<=|| !$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