Asp.net
跨重定向使用 Asp.Net MVC TempData 時是否存在可能的“競爭條件”?
使用 TempData 時,我的理解是它只會為一個請求保留您放入其中的任何內容。因此,當使用 TempData 跨重定向保留數據時(為了使用 Post-Request-Get 模式),來自使用者的其他一些請求是否可能在發送重定向的響應和發送重定向的響應之間進入伺服器?使用者的瀏覽器請求重定向到的頁面?在這種情況下,get 將不再有可用的 TempData,對嗎?
現在,我知道發生這樣的事情非常罕見,但考慮到使用者可能在另一個選項卡中打開了另一個頁面,並且該頁面上可能發生了 ajax 或定時回調請求,它突然不會在我看來這一切都是不可能的。它只是通常被認為太遙遠而無法擔心,還是我誤解了什麼?
編輯:更具體地說明我所詢問的場景。
- 在 Tab 1 中,使用者瀏覽到帶有文章表單的頁面
- 在選項卡 2 中,使用者瀏覽到網站上的另一個頁面,該頁面在計時器上執行 ajax 回調
- 在選項卡 1 中,使用者將表單發佈到伺服器
- 當伺服器收到文章時,它會在 TempData 中保存一些數據並發送回重定向響應
- 在選項卡 2 中,發生了定時 ajax 回調,向伺服器發送 GET 請求。TempData 已從會話中刪除
- 在選項卡 1 中,瀏覽器接收重定向並發出 GET 請求
- 伺服器處理 GET 請求並查找 TempData,但它不再存在
好吧,瀏覽 ASP.NET MVC 程式碼顯示,雖然 TempData 儲存在會話中,但在載入時從會話中刪除。它被載入到控制器的 ExecuteCore() 方法中。
所以我認為這意味著是的,你完全可能會遇到競爭條件,來自不同瀏覽器選項卡的請求(你有一個很好的例子)可能會導致這個問題。但這取決於每個瀏覽器處理請求的模型。瀏覽器可能會將所有請求序列化到同一伺服器,以便一次只執行一個。實際上,他們不會這樣做,但是,他們會將其限制為(我認為)對同一伺服器的 5 個並發請求的最大值。
鑑於 ASP.NET MVC 站點可能是對任何瀏覽器的服務請求(畢竟是 Web :) ),它是一個真實的場景,儘管可能很少見,正如您所說。