usuarios - Prevenir sesión expirada en sesión de PHP para usuario inactivo
restringir acceso a paginas usando php y mysql (5)
Aquí hay un ejemplo para evitar el tiempo de espera de sesión utilizando una llamada jQuery Ajax:
var refreshTime = 600000; // every 10 minutes in milliseconds
window.setInterval( function() {
$.ajax({
cache: false,
type: "GET",
url: "refreshSession.php",
success: function(data) {
}
});
}, refreshTime );
en refreshSession.php puedes hacer algo como session_start ()
Tengo un problema con mi aplicación: mi aplicación tiene muchos formularios y necesita aproximadamente 1 hora para completar este formulario porque el formulario es dinámico (puede agregar otros formularios). El problema es: la sesión de mi servidor web es de 24 minutos. Cuando el usuario completó el formulario, pasó mucho tiempo y la sesión se agotó porque el servidor reconoce que el usuario está inactivo. Es muy molesto cuando se envía el formulario, la mayoría de los datos se perdieron y el usuario regresa a la página de inicio de sesión. Intenté que mi sesión expirara en 10 horas con este código:
ini_set(''session.gc_maxlifetime'', ''36000'');
Pero no está funcionando en mi servidor, ¿es posible que mi servidor impida la función ini_set()
?
Entonces, ¿qué debo hacer para resolver este problema? ¿Puedo evitar el tiempo de espera de la sesión para que la sesión se pueda ampliar a 10 horas? ¿O puedo desactivar la expiración de la sesión?
Gracias
Cambiar ini_set
utilizando ini_set
debería funcionar siempre que cambie la opción antes de llamar a session_start
. Así que hacer lo siguiente debería funcionar:
ini_set(''session.gc_maxlifetime'', 36000);
session_start();
También puede cambiar esa opción en otros contextos (vea la respuesta de ChazUK ).
Pero no configuraría el tiempo de vida de la cocinera a un valor fijo, pero convertiría la cookie de la sesión en una cookie de sesión real que dura hasta que finaliza la sesión del navegador (es decir, al cerrar el navegador). Puede hacerlo configurando session.cookie_lifetime en 0
.
También considere que el modelo de caducidad de la sesión de PHP es un poco peculiar, ya que el cálculo de la vida útil se basa en la última fecha de modificación de los datos de la sesión.
En lugar de configurar el tiempo en ini en una longitud fija, recuerde que el tiempo de espera de la sesión se restablece al volver a cargar. Así que cree un código ajax que haga una solicitud cada 5 minutos aproximadamente a un archivo (imagen o texto). De esta manera, el temporizador se reinicia cada 5 minutos y los usuarios pueden pasar un día completando sus formularios.
He tenido el mismo problema en el pasado. Lo que hice para solucionar esto fue colocar estas dos funciones en un archivo de configuración que se incluye en cada archivo.
session_set_cookie_params(86400);
ini_set(''session.gc_maxlifetime'', 86400);
y solo por seguridad mida esta linea en mi archivo .htaccess
php_value session.gc_maxlifetime 86400
La duración de una cookie de sesión se establece al crear la cookie de sesión. Si utiliza el método setcookie, un argumento del método es la LONGITUD que desea que dure la cookie.
Consulte el manual de PHP sobre el método para obtener información adicional: http://php.net/manual/en/function.setcookie.php