Todo lo que necesita es este (utiliza jQuery para el $ .post):
JavaScript (poner esto dentro de su proceso de carga-función o algo así)
setInterval(function(){$.post('path/to/refresh_session.php');},600000); //refreshes the session every 10 minutes
refresh_session.php
<?php
session_start();
if (isset($_SESSION['token'])) { //if you have more session-vars that are needed for login, also check if they are set and refresh them as well
$_SESSION['token'] = $_SESSION['token'];
}
?>
(Sé que esto es más o menos lo mismo que la respuesta aceptada, realmente quería comentar sobre ese pero aún no tengo suficiente reputación.
El mayor cambio está en JavaScript, no necesita una función completa, solo una línea.)
Información adicional:
Aunque creo que es suficiente con sólo llamar session_start()
en el php, si leo este derecho (http://nl3.php.net/function.session-start):
La devolución de llamada de lectura recuperará cualquier dato de sesión existente (almacenado en un formato serializado especial ) y será deserializado y utilizado para autom poblar aticalmente el superglobal $ _SESSION cuando la devolución de llamada devuelve los datos de la sesión guardada al manejo de la sesión PHP.
Y durante las pruebas solo pongo el código anterior en mi página de visitante, y no en la página de administración. Pero tenía ambas páginas abiertas en el mismo navegador (Chrome), y la página de administración permanecía registrada también, al menos durante más de una hora (no comprobé por más tiempo). PERO, no sé si todavía funciona si sólo utiliza session_start()
, sin actualizar manualmente cualquier sesión-var a todos ..
De cualquier manera, me gusta estar seguro de que la sesión de VARs que necesitan en realidad todavía están allí :)
¿Se pueden hacer algunas llamadas ajax? ¿Podrías describir tu guión un poco más? Puede ser que algunos ejemplos de código ayuden :) – Gogol
Interesante. Estoy lidiando con un problema similar, pero mi opinión al respecto es que uno debe evitar reiniciar automáticamente el tiempo de espera de la sesión en un intervalo, ya que eso creará efectivamente una sesión infinita que persistirá siempre que la ventana del navegador esté abierta. En su lugar, sugiero que aumente su vida útil máxima y que el tiempo de espera se pueda actualizar en función de la acción del usuario. Incluso el movimiento del mouse podría hacer el truco, iniciar un temporizador una vez que se mueva el mouse. A menos que se incluya algún componente de interacción del usuario, crea un gran agujero de seguridad. Las sesiones están diseñadas para caducar. –