que - coldfusion tutorial español
¿Podemos renovar la sesión en Coldfusion? (5)
Estoy almacenando 5-6 valores variables en mi sesión. ¿Alguna sugerencia sobre cómo puedo renovar mi estructura de sesión cuando está a punto de caducar? Estoy usando Coldfusion 8. ¡Gracias!
Cualquier llamada a una página de CFM desde esa sesión provocaría que la sesión se extienda. Lo que he visto hacer es que se ejecutará un temporizador JS y terminará poco antes de que expire la sesión. Cuando se ejecuta el temporizador, desencadena una ventana emergente que carga una página que no es de CFM (HTML básico) y esa página establece un mensaje sobre la sesión que finaliza pronto y pregunta al usuario si desea continuar.
Use AJAX para hacer ping al servidor y mantener viva la sesión
O simplemente extienda el tiempo de espera de la sesiónSpand.
La forma exacta de hacer lo que está pidiendo es enviar los datos de la sesión a la base de datos cuando se onSessionEnd
y restaurarlos en next onSessionStart
. Para averiguar las entradas de datos a leer, puede colocar cookies en el navegador del usuario con un identificador único (por ejemplo, id. Encriptado + salado de esa entrada), tipo de cosas "Recordarme".
Podría intentar configurar el tiempo de espera de la sesión en algo pequeño, digamos 5 minutos.
Luego, cuando alguien se autentique, extienda el tiempo de espera de la sesión a algo más grande, 30 minutos.
Y si se desconectan, vuelva a colocarlo.
p.ej. configura tu administrador cf con un tiempo de espera de sesión de 5 minutos.
Al iniciar sesión:
<cfscript>
// extend session timeout to 1800 seconds (30min)
session.SetMaxInactiveInterval( javaCast( ''long'', 1800 ) );
</cfscript>
Al desconectarse:
<cfscript>
// shrink session timeout to 300 seconds (5min)
session.SetMaxInactiveInterval( javaCast( ''long'', 300 ) );
</cfscript>
La sesión se suspende durante otros 5 minutos y luego se limpia. A menos que continúe usando el sitio, en cuyo caso cada solicitud de página le daría otros 5 minutos.
Aquí hay una idea de cómo podría verse Ajax para hacer ping automáticamente en el servidor (como se sugiere en la respuesta de Henry ).
//This function will keep the session alive as long as the page is still open.
//Whenever the page nears expiration, it automatically extends it.
function autoExtendSession(days,hours,mins,secs){
var milliseconds = (days*86400000)+(hours*3600000)+(mins*60000)+(secs*1000);
setTimeout(
function(){
$.post("server/heartbeat.cfm");
console.log("Heartbeat sent to the server.");
//Start another timer.
autoExtendSession(days,hours,mins,secs)
//Once we are 98% of the way to the timeout, the heartbeat is sent.
//This way the timeout should never actually be reached.
}, milliseconds-(milliseconds*0.02));
};
La página hearbeat.cfm
realidad no tiene que contener nada, el servidor renovará la sesión cuando lo haga $ .post, tenga o no contenido.