全天保持會話
回答
您可以做的第一件事是通過使用SQL(或其他數據庫)會話狀態服務器將會話與流程分離,該會話狀態服務器包含附加到會話標識的會話數據的序列化副本。然後,您可以使用持久cookie來回傳遞會話ID。任何到期的會話都可以重新生成或恢復。
既然你想整天保持一個會話(這天生就是不安全的),我們會假設大多數安全考慮已經被拋出。如果您擔心重播攻擊,您可以使用HMAC通過設置會話ID,日期時間,用戶名(如果這是您的數據的一部分)來驗證Cookie會話請求,也可以使用字符串中的IP地址,然後單向醃製這個數據的散列。通過這種方式,您可以重新哈希數據,並將與請求一起發送的哈希與來自該數據的生成的哈希進行比較,以查看請求是否有效。
對於使用SQL而不是inProc來說,這將緩解大量會話同時打開的問題(在這種情況下聽起來很可能) – 2010-10-26 12:57:02
強制頁面被由JavaScript每隔10分鐘左右刷新一次。會話超時後最後請求頁面多長時間,會話變得無效。每隔10分鐘刷新頁面時,會話在每次刷新時都會延長20分鐘。
或者使用類似於Ajax的方法刷新頁面的一部分*然後用戶不會注意到回發。 – 2010-10-26 12:28:30
這不會使瀏覽器關閉和維護會話。如果這不是要求,那麼這很有用,但如果用戶導航20分鐘並返回,則會中斷。 – 2010-10-26 12:28:39
這不會保持會話24小時開放 - 它會無限期地執行(不是這裏的要求) – 2010-10-26 13:02:08
如果您拒絕將web.config中的設置更改爲更長的值,則可以嘗試強制瀏覽器在會話超時的短時間內(例如17分鐘)刷新。可能還有其他漂亮的方法。
如果你可以找到一個方法來做到沒有這個會話,它會在以後節省你的痛苦。使用緩存策略(memcached)或查看資源使用情況。
例如你真的需要將X序列化到會話中嗎?
使用StateServer而非是InProc
這代表所有的會話處理到一個單獨的數據庫,並從服務器的過程中刪除。這樣可以緩解服務器資源耗盡的問題,從而可以將會話超時增加到24小時。
我相信這是唯一可行的解決方案。
Peiter處於正確的軌道上 - 製造虛假的請求以保持活力。你絕對不想刷新頁面,導致不需要的更新等。你甚至不需要刷新頁面的一部分。您只需每隔X分鐘發送一次ajax請求,而用戶將瀏覽器打開到啓用會話狀態的IHttpHandler。這非常非常有效 - 我們有一個應用程序完全依賴會話來處理5分鐘會話超時的任何事情。並且每4.5分鐘發一次會話心跳。它已經投產3年多了,我們還沒有失去一個會議。是的,在這種情況下會話狀態被存儲在進程中 - 會話的使用非常繁重,我們不希望等待他們出去使用SQL並返回。
PS:protip - 確保請求和響應唯一;否則在某些瀏覽器中緩存會導致此技巧無效。
把一個ajax調用放入一個定時器,一個不執行任何操作的方法「」,這就是即使用戶在頁面上但沒有做任何事情意味着「完全不活動」,不會註銷,我們已經實現了相同邏輯並解決了我們的問題,我們的目標是3到4個小時,並且我們不希望更改web.config中的值或因某些原因使用任何其他方式。
ajax調用將在「計時器」中,將計時器時間設置爲「任何」。
- 1. SharedPreferences保持會話
- 2. 會話劫持安全
- 3. 如何保持Servlet會話?
- 4. Xamarin.Android保持會話記錄
- 5. 保持會話活着
- 6. J2EE:Singleton vs保持會話
- 7. 保持會話活着MVC3
- 8. 如何保持會話?
- 9. 會話保持超時
- 10. 如何保持會話
- 11. 保持會話活着C#
- 12. ASP.NET會話保持「0」
- 13. 如何保持全天候運行
- 14. 在Seam中保持會話和對話
- 15. 保持電話中的用戶會話
- 16. 如何使會話持續保持.net
- 17. 連接池會保持oracle會話保持活動狀態嗎?
- 18. PHP會話將不會保持註冊
- 19. JSONP PHP會話不會保持不變
- 20. 使用ajax請求保持會話活動安全嗎?
- 21. MongoDB:我應該一直保持全局會話嗎?
- 22. 如何保持本地化和全球化的會話?
- 23. Android對話框保持安靜 - 不會保持一種尺寸
- 24. Django會話 - 在登錄/註銷之間保持會話數據
- 25. 丟失會話變量,同時保持會話ID
- 26. 你有多久保持會話cookie?
- 27. 保持會話在python中生效
- 28. 保持Java對象存活會話
- 29. 跨域會話保持活躍在asp.net
- 30. 如何保持用戶登錄會話?
難道你不能只將會話超時設置爲24小時嗎? – CyberDude 2010-10-26 12:25:07
爲什麼你不能在web.config中設置它? – 2010-10-26 12:27:25
@CyberDude:這意味着會話在* last *請求後的24小時內在服務器上保持活動狀態,並佔用整個時間的資源。 – 2010-10-26 12:30:04