Foros del Web » Programando para Internet » PHP »

Problemas con Sesiones, por favor ayuda

Estas en el tema de Problemas con Sesiones, por favor ayuda en el foro de PHP en Foros del Web. Hola, he estado siguiendo el ejemplo de cluster sobre autentificar a traves de sesiones, pero tengo un problema y es que cuando introduzco el nombre ...
  #1 (permalink)  
Antiguo 27/09/2005, 06:26
 
Fecha de Ingreso: septiembre-2005
Ubicación: Vejer de la Fra, Cádiz
Mensajes: 83
Antigüedad: 12 años, 2 meses
Puntos: 0
Problemas con Sesiones, por favor ayuda

Hola, he estado siguiendo el ejemplo de cluster sobre autentificar a traves de sesiones, pero tengo un problema y es que cuando introduzco el nombre de usuario y contraseña correcto, es como si no me abriese la sesion. Yo le doi un nombre a la sesion (autentificar) y lo que leo cuando le digo q me muestre el nombre de la sesion es PHPSESSID.

La modificacion q le he hecho a este script es mandar el codigo a traves de una sola pagina, os pongo el codigo para que podais echarle un vistazo.

Aqui esta la página index.php, que llama al script de validacion y recoge los datos del mismo.

Cita:
<?php
if ((isset ($_POST['validar'])) || (isset ($_SESSION['usuario_id'])))
{
//Aqui entraria cuando se le da al boton para validar a un usuario o cuando la sesion esta creada
require("Validar/verificar.php");
}
else
{
//Aqui entraria cuando se entra en la pagina por primera vez
// No almacenar en el cache del navegador esta página.
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Expira en fecha pasada
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Siempre página modificada
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Pragma: no-cache"); // HTTP/1.0
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<link rel="stylesheet" href="prueba_estilo.css" type="text/css">

</head>


<body>
<table width="800" border="2" align="center">
<tr align="center" height="100">
<td colspan="4"> Bienvenido a Nuestra web de Cluster Informatica</td>
</tr>
<tr align="center">
<td width="25%">Inicio</td>
<td width="25%">Productos</td>
<td width="25%">Foro de Consulta</td>
<td width="25%">Seguridad</td>
</tr>
</table>
<table width="800" border="2" align="center">
<tr>
<td width="200"><ul>
<li>Noticias</li>
<li>Nuestra Empresa</li>
<ul>
<li>yo</li>
</ul>
<li>Servicios</li>
<li>Contactenos</li>
</ul></td>
<td colspan="3" rowspan="3" align="center"><?php echo "Bienvenido: ", $_SESSION['usuario_login']; ?><br>
<?php
// Mostrar error de Autentificación.
include ("Validar/mensajes_de_error.php");
if (isset($_GET['error_login']))
{
$error=$_GET['error_login'];
echo "<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#FF0000'>Error: $error_login_ms[$error]</font>";
}
else
{
if ($_GET['entrar'] == "ok")
{
$nivel_acceso=10;

// Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel'])
{
header ("Location: $redir?error_login=5");
exit;
}
?>
<?php echo "Bienvenido: ", $_SESSION['usuario_id']; ?><br>
<p>Acceso Autorizado:</p>
Esto es una página con acceso restringido.<br><br>
Nombre de la sesion => <?php echo session_name(); ?> <br>
Usuario ID (referencia) => <?php echo $_SESSION['usuario_id']; ?><br>
Usuario login (nombre) => <?php echo $_SESSION['usuario_login']; ?><br>
Usuario Nivel de Acceso => <?php echo $_SESSION['usuario_nivel']; ?><br><br>
<br>
<a href="aut_gestion_usuarios.php">Gestionar usuarios</a>
<br><br>
<a href="aut_logout.php">Salir zona restringida</a>
<?php
}
}
?>
</td>
</tr>
<tr align="center">
<td><form method="post" action="index.php">
<table align="center">
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr>
<td align="right">Usuario:</td>
<td align="left"><input type="text" name="usuario" size="10"></td>
</tr>
<tr>
<td align="right">Contraseña:</td>
<td align="left"><input type="password" name="contr" size="10"></td>
</tr>
<tr height="30">
<td colspan="2" align="center"><input type="submit" name="validar" value="Ingresar" size="10"></td>
</tr>
</table>
</form></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
</table>

</body>
</html>
Aqui os mando el script de validacion, verificar.php:

Cita:
<?
// Motor autentificación usuarios.

// Cargar datos conexion y otras variables.
require ("config_bd.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 1: - Esta intentando entrar a una Zona Restringida!");
exit;
}

// Chequeamos si se está autentificandose un usuario por medio del formulario
if (isset($_POST['usuario']) && isset($_POST['contr']))
{
// 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_conexion= mysql_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,usuario,pass,nivel_acceso FROM $sql_tabla WHERE usuario='".$_POST['usuario']."'")
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['usuario']);
// encriptamos el password en formato md5 irreversible.
$password = md5($_POST['contr']);
//header ("Location: $redir?usuario=".$login."");
//exit;
// 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['usuario'])
{
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['pass'])
{
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 nombre 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');

//header ("location: $redir?usuario=".session_name()."");
//exit;

// 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_nivel']=$usuario_datos['nivel_acceso'];

//definimos usuario_nivel con el Nivel de acceso del usuario de nuestra BD de usuarios
$_SESSION['usuario_login']=$usuario_datos['usuario'];

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

// 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?entrar=ok");
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();
Header ("Location: $redir?error_login=4");
exit;
}
}
?>
Gracias a todos.
  #2 (permalink)  
Antiguo 27/09/2005, 06:57
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 13 años
Puntos: 1
Que tal a simple vista parece que no tienes ningun error en tu codigo, el problema podria estar es verificando el config_bd.php que tal vez falte el session_start(), para que propagues la sesion... Saludos.
__________________
Ante el desconocimiento ni entendimiento de las cosas decimos que los demás estan locos.

José Quintero. Saludos.
:adios:
  #3 (permalink)  
Antiguo 27/09/2005, 07:31
 
Fecha de Ingreso: septiembre-2005
Ubicación: Vejer de la Fra, Cádiz
Mensajes: 83
Antigüedad: 12 años, 2 meses
Puntos: 0
gracias, ya arregle el problema, pero no era eso lo q me pasaba.

El problema es que al principio del archivo index.php yo preguntaba por la variable de sesion (usuario_id), pues bien parece ser (si no es cierto lo que voy a decir q alguien me corrija, xq no estoy seguro de esto) que al preguntar por una variable de sesion y esta todavia no esta creada, no se crea la sesion.

El problema lo he solucionado preguntando no por la variable de sesion, sino por "$_get['entrar'] == 'ok'", y asi todo va bien.

Gracias por tu respuesta.
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:45.