2012-05-14 89 views
4

我正在研究一個MVC 3應用程序,該應用程序將託管在具有多工作進程設置的Web場中。有大約十幾個變量存儲在Session中,但由於IIS設置而丟失。ASP.NET MVC中每個用戶變量的會話替代方案

迷路我的意思是,當登錄過程成功時,我通過日誌記錄瞭解到,我設置了會話變量,但是在重定向操作之後以及着陸控制器操作中,會話變量通常是空的。我不確定這是否與HTTPS相關。

我們正在研究將存儲在Session中的用戶特定設置移出到某個其他機制的可能性,但有一個變量我無法做到。鑑於上述部署環境,我有以下問題。

  1. Cookie是我唯一的(最好的?)替代方法來存儲用戶特定設置的會話變量嗎?
  2. 如果是的話,是否存在一個用於編寫cookie的安全機制,以便它們不能被操縱,並且仍然可以在多服務器環境中讀取?
  3. 據我瞭解System.Runtime.Caching在上述IIS配置中運行時遇到同樣的問題。真的嗎?
+0

你能不能讓設置到數據庫?或者你需要他們在運行時緩存? – abatishchev

+0

我打算繼續走這條路線,但是當使用CSLA作爲我的基礎數據提供者時,我需要提供一個配置設置來獲取這種數據,類型的購物車場景。這是我試圖在每個用戶的基礎上尋找存儲替代方案的價值。感謝您的回覆。 – likestoski

回答

7

是cookies我唯一的(最好?)替代存儲會話變量 特定於用戶的設置?

不 - 他們是關於最糟糕的方法。想到三個原因:

  1. 他們可以被操縱。
  2. 他們隨客戶端到服務器的每個請求一起旅行 - 效率低下。
  3. 它們會給你的實現增加更多的複雜性,因爲你必須開始考慮以不同的方式保護它們。

如果這樣是有寫入cookie,使他們不能 被操縱並且仍然可以在多服務器環境中讀取的安全機制?

查看上面的答案。

據我所知,當在上面的IIS配置中運行時,System.Runtime.Caching遭受同樣的 問題。真的嗎?

是的。你應該使用任何超出proc的狀態提供者。您可以使用SQL Server存儲會話數據-provided你的對象是可序列,obviously-或State server modemode="stateserver"

Read here更多細節

+0

感謝您的回覆。你能解釋爲什麼餅乾是最糟糕的方法之一?這是因爲他們可以被操縱,還是有其他一些擔憂?無法使用Machine.config中的密鑰對它們進行加密保護? – likestoski

+0

@likestoski我在我的答案中添加了一些解釋。 – Icarus

相關問題