2013-11-27 72 views
0

我有一個包含像工作流程那樣的'嚮導'的應用程序,其中用戶編輯大量對象集合,一旦完成,他們可以選擇保存或取消其編輯。考慮到對象的大小,將它們存儲在客戶端並將它們全部絆倒它們是不可行的。相反,我們使用會話狀態來存儲對象,並使用Ajax方法來檢索/編輯它們。大型會話值的智能管理

我的問題是,如果用戶選擇在未完成此工作流程的情況下離開當前頁面,則對象集合會保留在會話中,直到會話過期或用戶再次開始相同的工作流程。鑑於可能有許多併發用戶,並且對象集合可能相當大(即每個用戶大於2MB),我擔心這會導致無用的內存消耗和潛在的性能下降。

當然還有其他方法可用,不使用會話(即寫入臨時表),但是,我想知道是否有一種方法可以智能檢測用戶從控制器導航離開控制器,以便我可以執行一些一些清理(刪除不必要的會話變​​量)。

回答

0

檢測用戶何時離開頁面非常困難。雖然這裏有幾個選項,但最可靠的可能是輪詢,這並不完美。例如,如果用戶的連接熄滅了幾秒鐘,則可以清除其會話。

如果嚮導外部的應用程序中的任何頁面都有用戶的活動,您也不能僅擦除嚮導會話對象。如果用戶打開多個選項卡/窗口,則此解決方案失敗。

如果可以在你的嚮導中放置一個計時器,那麼我會設置一個管理員來處理用戶管理嚮導對象集合的狀態。該經理將擁有每個對象的最後一個活動日期,並且您將設置滑動過期以消除在X分鐘內沒有活動的任何會話對象。

此解決方案將允許您編輯嚮導計時器的長度,以平衡用戶需求和服務器資源。如果您的會話消耗太多內存,那麼減少滑動過期,反之亦然。