2011-04-25 46 views
2

我在我的會話中存儲5-6個變量值。任何關於如何在會話結束時續訂我的會話結構的建​​議?我正在使用Coldfusion 8. 謝謝!我們可以在Coldfusion中更新會話嗎?

+2

除非您處於緊張的加載狀態,否則您可能只會延長會話超時時間並且看不到任何性能問題。 – 2011-04-25 21:12:09

回答

5

使用AJAX來ping服務器保持會話活着

或者只是延長會話超時timeSpand。

+0

我是否必須在ajax調用中做一些事情,還是隻能返回一個空白結果以便更新會話? – 2011-04-25 21:02:02

+1

您的AJAX調用應該碰到CFM頁面或CFC方法。這無能爲力,並且返回(例如)空字符串,但它需要成爲同一應用程序的一部分才能用作保持活動。 – 2011-04-25 21:19:17

2

從該會話對CFM頁面的任何調用都會導致會話被擴展。我所看到的是一個JS計時器將會運行並在會話過期前不久結束。當計時器運行時,它會觸發一個彈出窗口,加載一個非CFM頁面(基本HTML),該頁面將提示有關會話即將結束的消息,並詢問用戶是否希望繼續。

+0

這是處理它的好方法。您可能仍然希望非活動會話最終超時。 – 2011-04-25 20:50:03

0

確切做你所要求的方法是當會話數據進入數據庫時​​onSessionEnd解僱並在下一個onSessionStart恢復它。要找出要讀取的數據條目,可以使用唯一標識符(例如,該條目的鹽漬+加密標識)將Cookie放入用戶的瀏覽器中,類似於「記住我」的內容。

0

您可以嘗試將會話超時設置爲小一些,例如5分鐘。

然後,當某人進行身份驗證時,將會話超時時間延長到30分鐘。

如果他們註銷,請將其放回原處。

例如。用5分鐘的會話超時配置你的cf管理員。

在登錄:

<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分鐘。

1

以下是對Ajax的自動ping服務器看起來是這樣的想法(如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)); 
}; 

hearbeat.cfm頁面實際上並沒有包含任何內容,服務器將更新會話當$ .post點擊它時,無論它是否有內容。

相關問題