Como cambiar lo que dura una sesión PHP

elfosinmas

Hola.

Hacía mucho que no me pasaba por aquí.
He estado creando un nuevo juego en flash y php para el que entre otras cosas hago uso de las sesiones.

El juego va muy bien, pero... tengo el problema de que las sesiones caducan enseguida, a veces menos de 30 minutos.

¿Alguien sabe como puedo ampliar el tiempo de una sesión en PHP?

r2d2rigo

ini_set("session.gc_maxlifetime", "18000");

El segundo parametro es en segundos.

Ojo, necesitas tener acceso al PHP.ini para poder modificarlo al vuelo.

elfosinmas

No tengo acceso al PHP.ini

Por lo visto los cambios de configuración de PHP se pueden hacer mediante el uso de .htaccess

Por ejemplo:

php_flag register_globals 1

He intentado poner:
php_flag session.gc_maxlifetime 24000;

Pero se me a puesto a 0.

No sé muy bien como hacerlo con el .htaccess

¿Alguna idea?

Fr4nk0

elfosinmas creo que es php_value session.gc_maxlifetime 200000 en vez de php_flag como tu pusiste. Prueba a ver si era eso (por lo menos en Fedora creo que era php_value en vez de php_flag.

Otra forma puede ser establecer la duración en las cookies.
Puedes controlar el tiempo de una sesion poniendo esta linea ini_set("session.cookie_lifetime","36000"); pero tiene que ser la primera linea que aparezca, incluso antes de iniciar la sesion

Código PHP

<?php
ini_set("session.cookie_lifetime","36000");
session_start();
$_SESSION["ejemplo"]="invitado";
?>

Si ya quieres hacer cosas más elaboradas, puedes hacer que si ha pasado un tiempo determinado (una hora o lo que quieras) destruya la sesion.

Código PHP

<?php
ini_set("session.cookie_lifetime","36000");
session_start();
$_SESSION["time"] = time();
if (time() - $_SESSION["time"] < 3600)  {
echo 'no ha pasado una hora';
}else{
echo 'ha pasado mas de una hora';
session_destroy();
}
?>

Espero haber sido de ayuda. Ya me contarás si algo de esto te ha funcionado, o si has encontrado la solución pues compartela con nosotros.

elfosinmas

Bueno, sigo con problemas con la duración de la sesión.

He probado lo que pones del set_ini y no me funciona (no se refleja en el phpinfo)

Luego he puesto esto en el .htaccess:


php_value session.gc_maxlifetime 72000 
php_value session.cookie_lifetime 72000 
php_value session.use_trans_sid 1

Al comprobar con phpinfo(); si me ha cogido los cambios, todo parece indicar que si pues estos datos aparecen cambiados, pero la sesión sigue sin durar lo que debe, y ni mucho lejos 72.000 segundos.

¿Alguna otra idea?

Usuarios habituales

  • elfosinmas
  • Fr4nk0
  • r2d2rigo