Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/09/2005, 05:26
Pastilla666
 
Fecha de Ingreso: septiembre-2005
Ubicación: Vejer de la Fra, Cádiz
Mensajes: 83
Antigüedad: 18 años, 7 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.