Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/03/2007, 04:40
AmedioTopazio
 
Fecha de Ingreso: marzo-2007
Mensajes: 11
Antigüedad: 17 años, 1 mes
Puntos: 0
Pregunta Pierdo la sesion

Hola a todos/as!! Soy nuevo en el foro, y espero poder participar y que me ayuden durante mucho tiempo. Bueno, ahora les presento mi problema:
La semana pasada, tome de Internet un manual de "Autentificación de usuarios en PHP con sesiones". Este es el que les muestro a continuación:

Fichero index.html

Código HTML:
<html>
<head>
<title>Autentificación PHP</title>
</head>
<body>
<h1>Autentificación PHP</h1>
<form action="control.php" method="POST">
<table align="center" width="225" cellspacing="2" cellpadding="2" border="0">
<tr>
<td colspan="2" align="center">
<?php  if ($_GET["errorusuario"]=="SI"){?>
<p>Datos incorrectos</p>
<?php }else{  ?>
<p>Introduce tu clave de acceso</p>
<?}?></td>
</tr>
<tr>
<td align="right">USER:</td>
<td><input type="Text" name="usuario" size="8" maxlength="50"></td>
</tr>
<tr>
<td align="right">PASSWD:</td>
<td><input type="password" name="contrasena" size="8" maxlength="50"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="Submit" value="ENTRAR"></td>
</tr>
</table>
</form>
</body>
</html> 
Fichero control.php

Código PHP:
<?php

//vemos si el usuario y contraseña es váildo
ini_set("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0");
if (
$_POST["usuario"]=="amedio" && $_POST["contrasena"]=="entrar")
{
    
//usuario y contraseña válidos
    
session_start();
    
$_SESSION['ok']="ok";
    
//defino la sesion que demuestra que está autentificado
    
$_SESSION['ultimoAcceso']=date("Y-n-j H:i:s");
    
//defino la fecha y hora de inicio de sesión en formato aaaa-mm-dd hh:mm:ss<br>
    
session_write_close();
    
header ("Location: aplicacion.php");

}else 
{
    
//si no existe le mando otra vez a la portada
    
    
header("Location: index.php?errorusuario=SI");
}
?>
Fichero seguridad.php

Código PHP:
<?php
ini_set
("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0");
//Inicio la sesión
session_set_cookie_params(0"/"$HTTP_SERVER_VARS["HTTP_HOST"], 0);
//cambiamos la duración a la cookie de la sesión será destruida cuando finalice el script
//COMPRUEBA QUE EL USUARIO ESTA AUTENTIFICADO

if ($_SESSION['ok'] != "ok") {
    
    
header("Location: index.php");
    
//ademas salgo de este script
    
session_destroy();
    exit();
}
else{
    
//calculamos el tiempo transcurrido
    
$fechag=$_SESSION['ultimoAcceso'];
    
$ahora=date("Y-n-j H:i:s");
    
$tiempo_trans=(strtotime($ahora)-strtotime($fechag));
    
//strtotime es para convertir las fechas en segundos
    
if($tiempo_trans>=300){
    
//si pasaron 5 min o más
        
session_destroy();
        
header("Location:index.php");
        
//enviamos al usuario al site de autentificación
    
}else{
    
//actualizamos la fecha
      
$_SESSION['ultimoAcceso']=$ahora;
    }
}
?>
Fichero aplicación.php:

Código HTML:
<?php 
include("seguridad.php");?>
<html>
<head>
<title>Aplicación segura</title>
</head>
<body>
<h1>Si estás aquí es que te has autentificado</h1>
<br>
----
<br>
Aplicación segura
<br>
----
<br>
<br>
<a href="salir.php">Salir</a>
</body>
</html> 
Pues bien, llevo días mirando en internet, perdiendo mañanas completas porque consigo llegar al fichero de seguridad.php, pero aquí no encuentro la sesion en la que $_SESSION['ok'] tiene el valor que me permitiría comprobar que está en una sesion segura. Esto no funciona ni en mi servidor local (Apache2) ni en un servidor remoto (el cual he probado para comprobar que no era problema de configuración de mi servidor). He leído casi todos los mensajes del foro, y las faq´s, y he probado también en forzar antes del header que la sesión se mantenga. Tambien he comprobado las cookies: desactive el zonealarm, he probado en internet explorer y en Opera.
En serio, me tiene parado, esto es para presentar un proyecto para la facultad y estoy con tres lineas absurdas desde hace una semana. Lo único que consigo es que siempre me muestre el index.html.
Gracias a todos/as, y espero sus respuestas