我最近的任務是修復由於會話狀態被濫用而導致的相當惡劣的錯誤。我們有一個使用inproc會話狀態在單臺服務器上運行的asp.net Web應用程序。基本設計是從數據庫中加載類型化數據集,並使用常見會話變量名稱(如Session [「dataset」] = dataset)存儲在會話狀態中。數據存儲在會話中後,用戶將編輯數據,從會話中檢索數據集並更新併發送到數據庫進行更新。這種類型的數據編輯\存儲用於基本上執行相同操作的多個Web表單。直到用戶嘗試啓動應用程序的第二個實例並且會話變量中存儲的數據可能混淆爲止,這一切都是好事。如何最好地解決InProc會話狀態變量多實例問題?
這裏是我已經能夠找到
設置的sessionState無Cookie =「假」(每一個新實例都有一個唯一的會話ID) 專業人士那裏獲得可能的解決方法 - 最簡單的方法,幾乎沒有任何代碼改變需要 缺點 - 在URL全局唯一標識符,用戶可以編輯GUID,GUID可以複製
使用自定義會話密鑰對每個實例(大約傳遞一個會話密鑰,並結合它的「數據集」 +會話密鑰的名稱,以便每個實例都有一個唯一的會話變量) PROS - 沒有一個GUID URL 缺點 - 大部分的代碼量的變化,可能是脆弱的
刪除會話變量(負載從數據庫中的數據集進行編輯第二次) PROS-釋放了服務器資源,不再依賴會話狀態 缺點 - 性能命中,代碼的高量變化
任何人都知道任何其他可能的解決方案?謝謝
我同意,緩存每個用戶的數據是不好的。這就是我試圖解決它的原因。當你說使用「全局緩存」時,我不確定你的意思。我已經爲應用程序範圍的數據使用了應用程序緩存,但是如何爲每個用戶加載的數據工作? – NullReference 2010-10-21 21:44:02
全球是相對的,每個應用程序是我的想法:)如果你真的,真的必須有每個用戶的數據,你可以用一個連接到用戶的密鑰保存數據。但是,除非你真的有性能問題,否則我不推薦緩存。 – Onkelborg 2010-10-21 21:47:05