Foros del Web » Programando para Internet » PHP »

No lee las variables de sesión

Estas en el tema de No lee las variables de sesión en el foro de PHP en Foros del Web. Hola a todos Tengo la siguiente página que comprueba los datos de acceso (login y password) para poder iniciar una sesión e ir a una ...
  #1 (permalink)  
Antiguo 27/11/2009, 11:49
 
Fecha de Ingreso: octubre-2008
Mensajes: 87
Antigüedad: 11 años, 1 mes
Puntos: 0
Exclamación No lee las variables de sesión

Hola a todos
Tengo la siguiente página que comprueba los datos de acceso (login y password) para poder iniciar una sesión e ir a una página de acceso restringido, el código es el siguiente:

"validacion.php"
Código PHP:
<?
header
('Content-Type:text/html; charset=UTF-8');
// Cargar datos conexion.
require ('conexionInc.php');

// chequear página que lo llama para devolver errores a dicha página.

$url explode("?",$_SERVER['HTTP_REFERER']);
$pag_referida=$url[0];
$redir=$pag_referida;
// chequear si se llama directo al script.
if ($_SERVER['HTTP_REFERER'] == ""){
die (
"Error cod.:1 - Acceso incorrecto!");
exit;
}


// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['user']) && isset($_POST['pass'])) {

// Conexión base de datos.
// si no se puede conectar a la BD salimos del scrip con error 0 y
// redireccionamos a la pagina de error.
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass") or die(header ("Location:  $redir?error_login=0"));
mysql_select_db("$sql_db");

// realizamos la consulta a la BD para chequear datos del Usuario.
$usuario_consulta mysql_query("SELECT ID,login,password FROM $sql_tabla WHERE login='".$_POST['user']."'") or die(header ("Location:  $redir?error_login=1"));

 
// miramos el total de resultado de la consulta (si es distinto de 0 es que existe el usuario)
 
if (mysql_num_rows($usuario_consulta) != 0) {

    
// eliminamos barras invertidas y dobles en sencillas
    
$login stripslashes($_POST['user']);
    
// encriptamos el password en formato md5 irreversible.
    
$password md5($_POST['pass']);

    
// almacenamos datos del Usuario en un array para empezar a chequear.
     
$usuario_datos mysql_fetch_array($usuario_consulta);
  
    
// liberamos la memoria usada por la consulta, ya que tenemos estos datos en el Array.
    
mysql_free_result($usuario_consulta);
    
// cerramos la Base de dtos.
    
mysql_close($db_conexion);
    
    
// chequeamos el nombre del usuario otra vez contrastandolo con la BD
    // esta vez sin barras invertidas, etc ...
    // si no es correcto, salimos del script con error 4 y redireccionamos a la
    // página de error.
    
if ($login != $usuario_datos['login']) {
           
Header ("Location: $redir?error_login=4");
        exit;}

    
// si el password no es correcto ..
    // salimos del script con error 3 y redireccinamos hacia la página de error
    
if ($password != $usuario_datos['password']) {
    
        
Header ("Location: $redir?error_login=3");
        exit;}

    
// Paranoia: destruimos las variables login y password usadas
    
unset($login);
    unset (
$password);

    
// En este punto, el usuario ya esta validado.
    // Grabamos los datos del usuario en una sesion.
    
     // le damos un mobre a la sesion.
    
session_name($usuarios_sesion);
     
// incia sessiones
    
session_start();

    
// Paranoia: decimos al navegador que no "cachee" esta página.
    
session_cache_limiter('nocache,private');
    
    
// Asignamos variables de sesión con datos del Usuario para el uso en el
    // resto de páginas autentificadas.

    // definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
    
$_SESSION['usuario_id']=$usuario_datos['ID'];
    
    
//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
    
$_SESSION['usuario_login']=$usuario_datos['login'];

    
//definimos usuario_password con el password del usuario de la sesión actual (formato md5 encriptado)
    
$_SESSION['usuario_password']=$usuario_datos['password'];


    
// Hacemos una llamada a si mismo (scritp) para que queden disponibles
    // las variables de session en el array asociado $HTTP_...
    
$pag=$_SERVER['PHP_SELF'];
    
Header ("Location: $pag?");
    exit;
    
   } else {
      
// si no esta el nombre de usuario en la BD o el password ..
      // se devuelve a pagina q lo llamo con error
      
Header ("Location: $redir?error_login=2");
      exit;}
} else {

// -------- Chequear sesión existe -------

// usamos la sesion de nombre definido.
session_name($usuarios_sesion);
// Iniciamos el uso de sesiones
session_start();

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,
// El caso mas comun es el de una vez "matado" la sesion se intenta volver hacia atras
// con el navegador.

if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die (
"Error cod.: 2 - Acceso incorrecto!");
exit;
}else{
  
Header ("Location:P_inicio.php?");
  }
}
?>
Y la página"P_inicio.php"
Código PHP:
<?php
session_start
(); 
if (!isset(
$_SESSION['usuario_login'])){echo('No eXiste');}
.....
Antes de poder llegar a "P_inicio.php" ha tenido q pasar por "chequear sesion"donde comprobamos antes si se han creado correctamente las variables de sesión. En caso de no crearse correctamente no llegaría a "P_inicio.php". Aún así, al ejecuatar "P_inicio.php" no reconoce la variable $_SESSION['usuario_login'] (ni ninguna otra de las creadas) escribiendo como resultado del código -->No existe

Lo primero q hago es session_start() sin huecos ni espacios en blanco y anteriormente justo antes de venir a esta página me ha dicho q se han creado todas las variables de sesión correctamente.

¿que me ocurre? ¿puede alguien ayudarme?
Muchas gracias
  #2 (permalink)  
Antiguo 27/11/2009, 11:56
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.975
Antigüedad: 11 años, 3 meses
Puntos: 2190
Respuesta: No lee las variables de sesión

en validacion.php debes incluir session_start(); antes de enviar cualquier salida y/o headers al navegador.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 27/11/2009, 12:08
 
Fecha de Ingreso: octubre-2008
Mensajes: 87
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: No lee las variables de sesión

Gracias Triby pero así lo he hecho antes de comprobar si existen las variables de sesion y antes del header...

Código PHP:
.....
.........

session_start(); <----AQUÍ

// Chequeamos si estan creadas las variables de sesión de identificación del usuario,


if (!isset($_SESSION['usuario_login']) && !isset($_SESSION['usuario_password'])){
// Borramos la sesion creada por el inicio de session anterior
session_destroy();
die (
"Error cod.: 2 - Acceso incorrecto!");
exit;
}else{
  
Header ("Location:P_inicio.php?");
  }
}
?> 
  #4 (permalink)  
Antiguo 27/11/2009, 12:25
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.975
Antigüedad: 11 años, 3 meses
Puntos: 2190
Respuesta: No lee las variables de sesión

Tu codigo original:
Código php:
Ver original
  1. <? // No uses short tags, algunos servidores no las permiten, usa <?php
  2.  
  3. // -------> O colocas el session_start aqui o cambias el header mas abajo
  4. //  Siempre inicializa sesiones, independientemente de que el usuario haya ingresado o no
  5. //  Te evitara algunos dolores de cabeza
  6.  
  7. header('Content-Type:text/html; charset=UTF-8');
  8. // Cargar datos conexion.
  9. require ('conexionInc.php');
  10.  
  11. // chequear página que lo llama para devolver errores a dicha página.
  12.  
  13. $url = explode("?",$_SERVER['HTTP_REFERER']);
  14. $pag_referida=$url[0];
  15. $redir=$pag_referida;
  16. // chequear si se llama directo al script.
  17. if ($_SERVER['HTTP_REFERER'] == ""){
  18. die ("Error cod.:1 - Acceso incorrecto!");
  19. }
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 27/11/2009, 12:47
 
Fecha de Ingreso: octubre-2008
Mensajes: 87
Antigüedad: 11 años, 1 mes
Puntos: 0
Respuesta: No lee las variables de sesión

¡¡MUCHAS GRACIAS TRIBY¡¡¡
Ya sé lo primero q debo hacer siempre

Me imagino q sí lo primero q hago, haya ingresado o no el usuario, es inicializar sesión.... ¿ lo más correcto entonces sería si detecto que no ha ingresado o alguno de sus datos no son correctos será destruir la sesión no? o ¿pasa algo si no lo hago?

Gracias por la ayuda y perdón por lo básico de mis preguntas pero es mi primer proyecto PHP.
  #6 (permalink)  
Antiguo 27/11/2009, 13:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 9.975
Antigüedad: 11 años, 3 meses
Puntos: 2190
Respuesta: No lee las variables de sesión

No es necesario destruir la sesion, normalmente eso se hace solo cuando finalizan sesion (logout), de lo contrario:

Si el usuario inicio sesion:
$_SESSION['usuario'] = $identificador_de_usuario;

Si no inicio sesion correctamente o aun no ha ingresado:
$_SESSION['usuario'] = false;
o eliminar la variable que usas para las comparaciones:
unset($_SESSION['usuario']);
__________________
- León, Guanajuato
- GV-Foto
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 10:38.