Foros del Web » Programando para Internet » PHP »

Problema con Cookies solo en Firefox e Internet Explorer

Estas en el tema de Problema con Cookies solo en Firefox e Internet Explorer en el foro de PHP en Foros del Web. 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. ...
  #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
  #2 (permalink)  
Antiguo 02/11/2012, 08:35
Avatar de llorcasantana  
Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: Problema con Cookies solo en Firefox e Internet Explorer

que es lo que quieres hacer esactamente?? porque la verdad no entiendo. se algo de lo del cookie, pero aun no entiendo lo que quieres hacer con el
  #3 (permalink)  
Antiguo 02/11/2012, 08:42
erchavalin
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Problema con Cookies solo en Firefox e Internet Explorer

Perdonad mi estupidez, yo la justifico alegando que la falta de sueño me afecta, pero juzguen ustedes.
El problema es que en Chrome la variable $_POST['login'] se establece mientras que en Firefox o IE no.
Solución:
if(isset($_POST['login']) || isset($_POST['user']) && isset($_POST['pass']))

y así se inicia la función de login. Todo funciona y puedo montarme una fiesta mientras el usuario puede loguearse

Gracias por vuestra atención y perdonad por la pérdida de tiempo
  #4 (permalink)  
Antiguo 02/11/2012, 09:14
Avatar de llorcasantana  
Fecha de Ingreso: octubre-2012
Mensajes: 45
Antigüedad: 11 años, 5 meses
Puntos: 2
Respuesta: Problema con Cookies solo en Firefox e Internet Explorer

No te digas estupido ni nada de eso

Aqui todos estamos para ayudarnos y nadie esta para juzgar, porque nadie nacie sabiendo. Todos empezamos desde cero.

Etiquetas: explorer, firefox, internet
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 13:07.