Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/03/2004, 09:33
Avatar de sakul
sakul
 
Fecha de Ingreso: julio-2002
Mensajes: 274
Antigüedad: 21 años, 8 meses
Puntos: 0
Problema con registro de usuarios (con sessions)

Continuando con la configuración del sistema de registro de usuarios de mi web, me encuentro con el siguiente problema:

Cuando el navegador no acepta cookies, la pag. principal trabaja la identificación con sesiones. La pag. principal lo hace bien, y envía un mensaje de "usuario identificado como: Pepe".

Pero parece que no pasa alguna variable (tal ves la de session) a las otras paginas, por lo cual me rechazan y me piden usuario y contraseña.

El sistema con COOKIES funciona bien. Pero no con sesiones.

La sentencia "
Código PHP:
session_start();
está al inicio de todas las pags.

Y el código que te logea es el sigte:

Código PHP:
<?php
// Inicializamos las variables
$loginCorrecto false;
unset(
$_SESSION['id']);
$nickUsuarioL="";
$emailUsuarioL="";
$nombreUsuarioL="";
//Inicializamos el nº de recargas de la página si no está inicializado
 
if(!isset($_SESSION['recarga'])){$_SESSION['recarga'] = 0;}
//Inicializamos la variable sid para utilizarla más tarde
$sid md5(SID);

//Incluimos el script que detecta el navegador y la IP del usuario
include('comunidad2/identificar.inc.php');
//Hayamos la variable que le corresponde al navegador que se está usando 
//para luego compararla con la de la base de datos
$identificador md5(get_full_ip() .'-'browser_detection());

if(isset(
$_COOKIE["Acepta"]))// Comprueba si acepta cookies
{
    
// Comprueba que existan las cookies de nick y password
    
if(isset($_COOKIE["usNick"]) && isset($_COOKIE["usPass"]))
    {
        
// Comprueba q haya un usuario en la BD con esos datos
        
$result mysql_query("SELECT * FROM usuarios WHERE 
            nick = '"
.$_COOKIE["usNick"]."' AND
            sid = '"
.$_COOKIE["usPass"]."' AND
            identificador = '"
.$identificador."'");
        if(
$row mysql_fetch_array($result)) 
        {
            
$sql "Update usuarios Set 
                sid = '"
.$sid."',
                ultima_visita = NOW()
                Where id = '"
.$row['id']."'";
            
mysql_query($sql) or die (mysql_error());
            
            
// Si es que existe regraba las cookies y registra unas cuantas variables q pueden ser utiles
            
setcookie("usNick",$_COOKIE["usNick"],time()+7776000'/''mipagina.com');
            
setcookie("usPass",md5(SID),time()+7776000'/''mipagina.com');
            
            
$_SESSION['usNick'] = $_COOKIE["usNick"];
            
$_SESSION['usPass'] = md5(SID);
            
$_SESSION['id'] = $row['id']; 
            
            
$loginCorrecto true;
            
$nickUsuarioL $row["nick"];
            
$emailUsuarioL $row["email"];
            
$nombreUsuarioL $row["nombre"];
        } 
        else    
        {
            
// Si no existe, destruimos las cookies.
            
setcookie("usNick","x",time()-3600'/''mipagina.com');
            
setcookie("usPass","x",time()-3600'/''mipagina.com');
        }
        
mysql_free_result($result);// Libera la consulta
    
}
}
else 
// Si es que no acepta cookies
{
    
// Comprueba si ya ha probado a escribir la cookie y si ya ha probado es que no se aceptan
    
if (!isset($_COOKIE['Acepta']) && $_SESSION['recarga'] > 1)
    {
        echo 
'No acepto cookies, que pasa?!!??<br>';
    }
    
    
// Comprueba las variables de nick y password pero esta vez en variables de sesión
    
if(isset($_SESSION["usNick"]) && isset($_SESSION["usPass"]))
    {
        
// Comprueba q haya un usuario en la BD con esos datos
        
$result mysql_query("SELECT * FROM usuarios WHERE 
            nick = '"
.$_SESSION["usNick"]."' AND 
            sid = '"
.$_SESSION["usPass"]."' AND 
            identificador = '"
.$identificador."'");
        if(
$row mysql_fetch_array($result)) 
        {            
            
$sql "Update usuarios Set 
                ultima_visita = NOW()
                Where id = '"
.$row['id']."'";
            
mysql_query($sql) or die (mysql_error());
            
            
// Si es que existe registra unas cuantas variables q pueden ser utiles 
            
$_SESSION['id'] = $row['id'];
            
$loginCorrecto true;
            
$nickUsuarioL $row["nick"];
            
$emailUsuarioL $row["email"];
            
$nombreUsuarioL $row["nombre"];
        } 
        else    
        {
            
// Si no existe destruimos las sesiones.
            
unset($_SESSION['usNick']);
            unset(
$_SESSION['usPass']);
            unset(
$_SESSION['id']);
        }
        
mysql_free_result($result);// Libera la consulta
    
}
}
// Esto indica que la ya se ha probado a escribir la cookie
$_SESSION['recarga'] = $_SESSION['recarga']+1;
?>