Foros del Web » Programando para Internet » PHP »

Problema con registro de usuarios (con sessions)

Estas en el tema de Problema con registro de usuarios (con sessions) en el foro de PHP en Foros del Web. 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, ...
  #1 (permalink)  
Antiguo 08/03/2004, 09:33
Avatar de sakul  
Fecha de Ingreso: julio-2002
Mensajes: 274
Antigüedad: 15 años, 4 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;
?>
  #2 (permalink)  
Antiguo 08/03/2004, 14:48
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 14 años, 10 meses
Puntos: 0
Que navegador estás utilizando y como haces para pasar el SID de una página a otra?
__________________
Saludos, Mich
  #3 (permalink)  
Antiguo 09/03/2004, 12:41
Avatar de sakul  
Fecha de Ingreso: julio-2002
Mensajes: 274
Antigüedad: 15 años, 4 meses
Puntos: 0
Hola, estoy usando el I.E. 5 y la forma de pasar la SID es poniendo en cada pagina el session_start(); .

Debo hacer algo más?
  #4 (permalink)  
Antiguo 09/03/2004, 14:04
 
Fecha de Ingreso: enero-2003
Mensajes: 75
Antigüedad: 14 años, 10 meses
Puntos: 0
Con algunos navegadores si no se utilizan las cookies es necesario pasar el SID por la url para que se conserve la sesión en caso contrario el navegador crea una nueva sesion y las variables dejan de tener valor.

básicamente se hace incluyendo en los enlaces algo tal que asín:

Código PHP:
<a href="algo.php?<? echo SID ?>">ALGO</a>
Prueba haber si te funciona eso.
__________________
Saludos, Mich
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 17:28.