2013-03-13 21 views
0

的衝突我有它使用「過程」會話的默認的MVC3 Web應用程序。我在地方PRG模式 - 即當回發,如果我的ModelState中無效,我的模型存儲在TempData的和重定向到原來的取得動作。在獲取操作中,我獲取模型數據(如果存在)併發送到視圖。我相信這是MVC的基本方面之一。長期使用和會話/ TempData的

我知道後臺TempData是一個會話變量,在PRG轉換中使用 。我需要知道的是,無論是 可能有衝突或交叉refrencing - 如果我用兩頁的東西 喜歡的TempData [「模型」],並可同時訪問的網頁 。那會覆蓋通用數據 的TempData [「模型」]或者是安全的,如果我使用 兩個不同的頁面相同TempData的名字。

它會與Session [「model」]類型的數據衝突嗎?我正面臨一些意外的會話數據損壞 - 可能是由於我的內部代碼會重置會話數據或其他內容。會話數據可能會部分損壞嗎?我的意思是Session [「data1」]可以,但Session [「data2」]不見了?

我的用戶經常使用的網絡應用程序很長一段時間導致會話超時。我試圖爲會議的ASP.Net會話狀態的服務,但導致性能問題,因爲我存儲一些重物(通過序列化)會話。所以最後我在過程模式下恢復了原來的默認值。

PLS份額,如果你有任何類似的經驗。

+1

會議總是tempermental由於時間收縮。 TempData [「model」]不應與Session [「model」]衝突,但是,TempData只能使用一次。 ViewBag允許重用。我以前不得不處理將會話的數據保存回數據庫,這是令人生氣的。通常最好的想法是讓用戶快速進出,而不是讓他們在整個流程中間漫遊。只是一個想法。 – IyaTaisho 2013-03-13 18:14:42

+0

你能分享一些相關的代碼嗎?爲什麼需要將數據存儲在TemData中並將其傳遞給GET操作?您可以簡單地添加模型錯誤並將其返回到視圖... – Rafay 2013-03-13 19:19:33

+0

PRG模式是必需的,因爲我不想複製下拉數據源,身份驗證等代碼...我的TempData使用在重定向期間是有限的到獲取請求。我的代碼還有其他一些可能會跟蹤的事情。我只是想知道在兩個並行請求的情況下TempData是否可能發生故障。 – 2013-03-14 09:10:47

回答

0

TempData的默認使用SessionState會並獲得SessionState的是默認的排斥。因此,如果您執行兩個併發重新請求,則必須等待其他人釋放SessionState鎖定。TempData不會直接干擾使用SessionState。 作爲SessionState的默認使用進程內,它幾乎可以隨時隨地無效。

你可能想看看http://brockallen.com/2012/06/11/cookie-based-tempdata-provider/