Solucionado

Problema caducidad sesion php

5175 visitas 8 respuestas

Hola, tengo un a consulta sobre las sesiones en php. Quiero conseguir que la sessión no caduqué hasta que se cierre el navegador, para ello utilizo:

ini_set("session.use_trans_sid",1);
session_start();

También así:

ini_set("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0");
session_start();

Tampoco me funciona:

session_set_cookie_params(0);
session_start();

o

 ini_set('session.cookie_lifetime', 0);

El problema es que mi session se caduda y quiero que dure hasta que se cierre el navegador o mientras no se cierre el navegador.

Uso un server local con apache y php5 me gustaria cambiar desde el script y no usar php.ini

Estoy un poco perdido, agradesco toda la ayuda.

por

Registrado desde: 24 Oct 14

Respuestas

0 1

Y porque mejor no usas variables de sessio.. por ejemplo:

$_SESSION['usuario'] = "1";

El 1 representa el id del usuario..claro que tienes q colocarla despues de el session_star();

por desde Nicaragua

Registrado desde: 17 Oct 14
0 0

Hola, no estoy preguntando como se declara una varaible. Estoy preguntando sobre la caducidad de la session.

Un saludo

por

Registrado desde: 24 Oct 14
2 0

Buenas noches Alberti. El tema de las sesiones tiene un poco de "complicación" en este asunto, y hay ciertas directrices de configuración que deberíamos tener claras para poder trabajar con ellas.

  • session.gc_maxlifetime

session.gc_maxlifetime especifica el número de segudos transcurridos después de que la información sea vista como 'basura' y potencialmente limpiada. La recolección de basura puede suceder durante el inicio de sesiones (dependiendo de session.gc_probability y session.gc_divisor). Por defecto es 1440.

  • session.cookie_lifetime

session.cookie_lifetime especifica el tiempo de vida en segundos de la cookie que es enviada al navegador. El valor 0 significa "hasta que el navegador se cierre". Por defecto es 0.

  • session.gc_probability

session.gc_probability se usa junto con session.gc_divisor para manejar la probabilidad de que la rutina de gc (garbage collection, recolección de basura) está iniciada. Por defecto es 1.

  • session.gc_divisor

session.gc_divisor junto con session.gc_probability define la probabilidad de que el proceso de gc (garbage collection, recolección de basura) esté iniciado en cada inicialización de sesión. La probabilidad se calcula usando gc_probability/gc_divisor, p.ej. 1/100 significa que hay un 1% de probabilidad de que el proceso de GC se inicie en cada petición. session.gc_divisor por defecto es 100.

Entiendo que el problema radica en que el tiempo dedicado en la aplicación es muy elevado y termina marcandose la sesión como basura y limpiandola el sistema. Por lo que para ampliar este límite tenemos dos opciones:

Opción 1: Aumentar el tiempo de trabajo

Para esto necesitaremos ajustar el tiempo de la session.gc_maxlifetime, por ejemplo:

<?php
// 86400 segundos son 24 horas
session_set_cookie_params(86400); 
ini_set('session.gc_maxlifetime', 86400);
session_start();
(...)
?>

Con esto aumentamos el tiempo de la sesión a 24 horas, dejando que el usuario pueda trabajar libremente durante este tiempo.

Opción 2: Crear peticiones artificiales

Aquí lo que se trata es de hacer llamadas ajax en segundo plano para refrescar las peticiones y así conseguir reiniciar el "contador" de la sesión.

Por ejemplo con jQuery

(...)
var time = 10000;
setInterval(function() {
    $.ajax({
        url: 'actualizar_sesion.php',
        cache: false,
        async: false,
        type: "POST",
        data: {},
        success: function(){},
        error: function(request, status, error){
            alert('Error: ' + request.responseText + '  STATUS: ' + status + '  ERROR: '+error);
        }
    }); 
}, time);
(...)

Y en actualizar_sesion.php creamos un script que inicie sesión, para así refrescarla y mantenerla activa.

Espero haberte podido ser de ayuda.

Un saludo!!!

por desde España

Registrado desde: 07 Jan 03
0 0

Hola, aún así tampoco me funciona a la media hora sigue serrandose la sessión. session_set_cookie_params(86400); ini_set('session.gc_maxlifetime', 86400); session_start();

Cree un pequeño script de ejemplo, a la media hora mas o menos se cierra

<?php

ini_set("session.use_only_cookies","1");
ini_set("session.use_trans_sid","0");


session_name("loginUsuario");
session_start();
session_set_cookie_params(0, "/", $HTTP_SERVER_VARS["HTTP_HOST"], 0);

if($_GET["login"]==1){ $_SESSION["autentificado"]="SI";}

if ($_SESSION["autentificado"] != "SI") {

     echo "Session cerrada";

} else {

    echo "Session ok";

}
?> 

por

Registrado desde: 24 Oct 14
1 0

Buenas alberti, en ese script no has aplicado nada de lo respondido en el mensaje anterior.

La configuración de la sesión se debe hacer antes de iniciarla.

session_set_cookie_params();

Establece los parámetros de la cookie definidos en el archivo php.ini. El efecto de esta función sólo se mantiene para la duración del script. Por lo tanto, se necesita llamar a session_set_cookie_params() por cada petición y antes de llamar a session_start().

Esta función actualiza los valores ini en tiempo de ejecución de las claves de configuración ini de PHP que pueden ser recuperadas con la función ini_get().

Independientemente de esto, no has utilizado ninguna de las configuraciones que mencionamos anteriormente, session_set_cookie_params(86400); y ini_set('session.gc_maxlifetime', 86400);

Para comprobarlo simplemente muestra la directiva de configuración en ese script con echo ini_get('session.gc_maxlifetime'); y sabrás qué contiene.

Un saludo!

por desde España

Registrado desde: 07 Jan 03
0 0

Hola, perdona lo coloqué mal estoy un poco liado con este tema. Lo puse así para probar. Probe esto en un principio quizas me he liado, pero es posible mantener la sesion hasta que se cierre el navegador.

http://danielvegadev.wordpress.com/2010/12/22/sesion-infinita-hasta-que-se-cierre-el-navegador/ http://www.forosdelweb.com/f18/sesiones-que-no-tengan-caducidad-357406/

<?php

session_set_cookie_params(86400);
ini_set('session.gc_maxlifetime', 86400);

session_start();
echo ini_get('session.gc_maxlifetime');

if($_GET["login"]==1){ $_SESSION["autentificado"]="SI";}

if ($_SESSION["autentificado"] != "SI") {

     echo "Session cerrada";

} else {

    echo "Session ok";

}
?> 

por

Registrado desde: 24 Oct 14
0 0

Se sigue cerrando la sesión con este último.¿? Algún erros muchas gracias por tu ayuda

por

Registrado desde: 24 Oct 14
0 0

Puedes ser una respuesta muy tarde por el año del último comentario, pero yo lo tengo en mi sitio configurado para que caduque a las 5 horas, eso si tienes que modificar el fichero php.ini, busca session.gc_maxlifetime y ponle los segundos que quieras, yo lo tengo para 5 horas session.gc_maxlifetime = 18000 mi archivo lo tengo en /etc/php5/apache2/php.ini si no tienes acceso a tu php.ini porque tengas un hosting compartido tipo godaddy, te recomiendo usar digitalocean.com

Un saludo.

por

Registrado desde: 21 días