Can we renew session in Coldfusion?

Deadly 提交于 2019-12-14 00:36:46

问题


I am storing 5-6 variable values in my session. Any suggestions on how can I renew my session struct when its about to expire? I am using Coldfusion 8. Thanks!!


回答1:


Use AJAX to ping the server to keep the session alive

Or just simply extend the session timeout timeSpand.




回答2:


Any call to a CFM page from that session would cause the session to be extended. What I have seen done is a JS timer will be running and end shortly before the session expires. When the timer runs up it triggers a popup that loads a non CFM page(basic HTML) and that page states a message about the session ending soon and asking the user if they'd like to continue it.




回答3:


Here's an idea of what Ajax to automatically ping the server could look like (as suggested in Henry's answer.)

//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));
};

The hearbeat.cfm page doesn't actually have to contain anything, the server will renew the session when the $.post hits it, whether or not it has content.




回答4:


Exact way of doing what you are asking for is to push session data into the database when onSessionEnd fired and restore it on next onSessionStart. To find out the data entries to read you can put cookie into the user's browser with unique identifier (for example, salted+encrypted id of that entry), kind of "Remember me" stuff.




回答5:


You could try setting your session timeout to something small, say 5min.

Then when someone authenticates, extend the session timeout to something larger, 30min.

And if they signout, drop it back down.

eg. configure your cf admin with a 5 minute session timeout.

On sign in:

<cfscript>
// extend session timeout to 1800 seconds (30min)
session.SetMaxInactiveInterval( javaCast( 'long', 1800 ) );
</cfscript>

On sign out:

<cfscript>
// shrink session timeout to 300 seconds (5min)
session.SetMaxInactiveInterval( javaCast( 'long', 300 ) );
</cfscript>

The session hangs around for another 5 minutes and then is cleaned up. Unless you continue using the site, in which case each page request would give you a further 5min.



来源:https://stackoverflow.com/questions/5782420/can-we-renew-session-in-coldfusion

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!