Можем ли мы возобновить сеанс в Coldfusion? - PullRequest
2 голосов
/ 25 апреля 2011

Я храню 5-6 значений переменных в моем сеансе.Любые предложения о том, как я могу обновить мою структуру сеанса, когда он скоро истекает?Я использую Coldfusion 8. Спасибо !!

Ответы [ 5 ]

6 голосов
/ 25 апреля 2011

Используйте AJAX, чтобы пропинговать сервер, чтобы поддержать сеанс

Или просто увеличить время ожидания сеансаSpand.

2 голосов
/ 26 апреля 2011

Любой вызов страницы CFM из этого сеанса приведет к расширению сеанса. Я видел, что таймер JS будет работать и заканчиваться незадолго до истечения сеанса. Когда таймер запускается, он запускает всплывающее окно, которое загружает страницу без CFM (базовый HTML), и эта страница сообщает о завершении сеанса в ближайшее время и спрашивает пользователя, хотят ли они продолжить его.

1 голос
/ 21 июня 2016

Вот идея того, как может выглядеть Ajax для автоматической проверки связи с сервером (как предложено в Ответ Генри .)

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

Страница hearbeat.cfm на самом деле не имеетчтобы содержать что-либо, сервер возобновит сеанс, когда $ .post достигнет его, независимо от того, содержит ли он содержимое.

0 голосов
/ 18 января 2012

Вы можете попробовать установить время ожидания сеанса на что-то маленькое, скажем, 5 минут.

Затем, когда кто-то аутентифицируется, увеличьте время ожидания сеанса на что-то большее, 30 минут.

И если они выйдут из системы, бросьтеэто обратно вниз.

например.настройте cf admin с 5-минутным тайм-аутом сеанса.

при входе в систему:

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

при выходе из системы:

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

Сессия зависает еще 5минут, а затем очищается.Если вы не продолжите использовать сайт, в этом случае каждый запрос страницы будет давать вам еще 5 минут.

0 голосов
/ 26 апреля 2011

Точный способ выполнить то, что вы запрашиваете, - это вставить данные сеанса в базу данных при срабатывании onSessionEnd и восстановить их при следующем onSessionStart. Чтобы найти записи данных для чтения, вы можете поместить cookie в браузер пользователя с уникальным идентификатором (например, salted + зашифрованный идентификатор этой записи), что-то вроде «Запомнить меня».

...