Expirar sesión php

Tengo muchas dudas con las sesiones de php, sobre todo de porqué no expiran en mi aplicación!
Verán, tengo un script principal en el que inicio sesión:
<?php
session_start();
?>
Luego, compruebo que el usuario introducido esté registrado en la base de datos, entonces, si es así, recojo el id_usuario y su prioridad (niveles o perfiles de los usuarios):
<?php
$_SESSION['sesion'] = $datos[id_usuario];
$_SESSION['prior'] = $datos[prioridad];
?>
Bien, en el resto de scripts, compruebo que se haya iniciado sesión y que la prioridad sea correcta:
<?php
session_start();
if (!isset($_SESSION['sesion']) || $_SESSION['prior'] != 'GERENCIA') {
header("location:../index.php");
header("Cache-control: private");
die();
}
?>
Bien, todo esto funciona, pero lo que necesito es saber cuándo expira la sesión, si se puede cambiar ese valor de minutos o segundos y como valuar si se cerró sesión. Ah, también necesito una aclaración acerca de si las sesiones que yo utilizo (las explicadas arriba) son a través de cookies, url...
1

1 Respuesta

36.275 pts. Llevo casi 4 años programando aplicacioens web usando...
Primero te daré una breve explicación de que son las sesiones y para que se usan las mismas.
Las sesiones básicamente son variables globales que nos permiten almacenar datos que necesiten volver a ser usados en otros accesos a la página. Cuando una persona entra a una página que utiliza sesiones automáticamente se crea un archivo de session en los archivos temporales del servidor y en este archivo es donde se guardan los datos que nosotros deseemos almecenar. Para poder manejar las sesiones seria conveniente primero ver la manera que accedemos a estas y las usamos. Como dije antes cuando el usuario entra a la página que usa sesiones se crea un archivo, este archivo posee el mismo nombre que su "id".
Para que una página utilice sesiones debemos inicializarla con la función "session_start(void)", que básicamente lo que hace es crear una nueva sesión o retomar una creada en otra página(del sitio). Las sesiones propagan su SID(SESSION ID) de dos posibles maneras, según php.ini, por cookies o por url, es decir agregando a todos los posibles link el SID de la sesión. Otra razón por la que la sesiones suelen ser muy utilizadas es para la "autentificacion", determinando el acceso a la página según alguna variable especifica de la sesión. Te pongo dos archivos útiles para la explicación:
index.php
============================================================================================================================================================
<?php
session_start();
?>
<html>
<head>
<title>Las sesiones y Yo(Nefertiter)</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<table width="500" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><?php
if(isset($_POST['enviar'])){
if(empty($_POST['usuario']) || empty($_POST['password']))
echo 'Debes llenar todos los datos';
elseif($_POST['usuario']==test and $_POST['password']==test){
$_SESSION['usuario']=$_POST['usuario'];
$_SESSION['password']=$_POST['password'];
echo 'Te haz loguedo como '.$_SESSION['usuario'];
}
}
?></td>
<td rowspan="2"><form name="login" method="post" action="index.php">
<table width="250" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td>Usuario:</td>
<td><input name="usuario" type="text" id="usuario"></td>
</tr>
<tr>
<td>Password:</td>
<td><input name="password" type="password" id="password"></td>
</tr>
<tr align="center">
<td colspan="2"><input name="enviar" type="submit" id="enviar" value="Enviar"></td>
</tr>
</table>
</form></td>
</tr>
<tr>
<td><a href="segura.php">PAGINA SEGURA</a></td>
</tr>
</table>
</body>
</html>
============================================================================================================================================================
segura.php
============================================================================================================================================================
<?php
session_start();
if(!empty($_SESSION['usuario'])){
/* La función empty() devuelve verdadero si el argumento posee un valor vacío,
al usar ! Empty() devuelve verdadero no solo si la variable fue declarada sino
ademas si contiene algún valor no nulo.
*/
echo 'Te haz logueado como :'.$_SESSION['usuario'];
echo 'Haz logrado el acceso a una pagina segura';
}else{
echo 'No estas logueado<br>';
echo 'Esta pagina es restringida!';
}
?>
============================================================================================================================================================
Como debes haber visto es sumamente simple la manera que en las variables de sesiones son establecidas puesto que se las trabaja como variables comunes, ahora voy a crear otro archivo, en el que mostrare como eliminarlas.
logout.php
============================================================================================================================================================
<?php
unset($_SESSION['usuario']);
unset($_SESSION['password']);
/* La función unset() destruye la variable que se le de como argumento*/
echo "Ya no te encuentras logueado"
?>
============================================================================================================================================================
Otras funciones
PHP no se limita solamente a una función en lo que a sesiones respecta. También poseemos otras como "session_name()", que nos permiten darle algún nombre en especial a la session, "session_id()", que nos devuelve el id de la session y en caso de introducir un argumento la reemplaza. También poseemos otra función llamada "session_cache_limiter()" que nos sirve para averiguar el limitador de cache actual, existen 3 modos: "nocache", "public" y "private"; cada una de estas posee una manera determinada de manejar la caducidad de las variables de sesión que se envían al navegador. Un detalle tanto "session_name()" como "session_cache_limiter()" deben ser declarados antes que "session_start()". Un ultimo ejemplo:
Sessions.settings.php
============================================================================================================================================================
<?php
session_name ("recursofaqs");
session_cache_limiter ("private");
session_start();
echo "<br> El nombre de la sesion es: ".session_name();
echo "<br> El limitador de la sesion es: ".session_cache_limiter();
echo "<br> El id de la sesion es: ". session_id();
?>
============================================================================================================================================================
Bueno espero que con esta explicación hayas entendido. Si aun no lo has hecho pregunta las dudas que tengas o has uso de nuestro mejor amigo Google.
Ahora vamos a tu problema. Las variables de sesión tienen su tiempo de vida máximo establecido a 180 segundos. Ese valor puede cambiarse perfectamente. ¿Cómo? Sencillo. Pues poniendo este código al principio de tu código:
============================================================================================================================================================
<?php
ini_set('session.cache_expire',valor); // donde valor es el nuevo valor que le daras a la variable de expiracion
session_start();
?>
============================================================================================================================================================
Eso hará que se modifiquen los valores del php.ini temporalmente para esa aplicación o variable de sesión. Bueno espero que esto resuelva tu problema.
Sobre Linux!
Hola:
Gracias por contestar! En cuanto a la variable "session.cache_limiter()" y sus 3 opciones (nocache, private, public), ¿qué diferencia hay entre ellas? ¿Y es obligatorio especificarlo para el tema de la expiración de la sesión?
En cuanto a lo de los 180 SEGUNDOS de vida máximo que tiene una sesión, yo creí que eran minutos (me pareció leerlo en algún sitio, en el "php.ini" exactamente), de todos modos, he probado a cambiarlo desde php.ini pero no me expira :S
¿No se supone que tiene que mandar un aviso de que ha caducado la sesión? Eso es lo que no entiendo, como sabe el usuario que su sesión ha caducado, debería avisarlo...
He probado a poner:
-->ini_set('session.cache_expire',valor);
Lo he puesto al inicio del programa, ¿o se supone que lo tengo que poner en cada script y antes del session_start()?
Como ves, tengo muchas dudas... espero que no sea muy pesada...
Rachel
¿Tiens PHP instalado sobre plataforma Windows o Linux?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas