Session["foo"] = "bar";
Response.Redirect("foo.aspx");
問題:
當foo.aspx讀取會話 「富」,它不存在。 會話在那裏,但「foo」沒有任何價值。
我在我們的生產環境中間歇性地觀察到這種情況。但我並不是在這裏問問a question about Response.Redirect()。
的解釋:
Bertrand Le Roy解釋(在粗體是我的):
現在,重定向確實是一個 特殊的頭髮送到客戶端,以便 它要求服務器對於不同的 頁面而不是它正在等待的頁面。 服務器端,發送此 標頭後,重定向結束響應。 這是一件非常暴力的事情。 Response.End實際上使用ThreadAbortException停止 頁面的執行,無論它是否爲 。 真的發生在這裏的是 會話令牌在戰鬥中丟失。
我的外賣是有Response.Redirect()可以是結束線程的霸道。如果它們出現在過於靠近的地方,那會威脅我的會話寫入。
問題:
什麼ASP.NET會話管理使得它很容易嗎? Response.Redirect()代碼行直到會話寫入行被「完成」纔開始執行 - 它怎麼會成爲會話寫入的威脅呢?
在執行下一行代碼之前會話寫入不會「完成」嗎?會話寫入是否有類似的其他情況(好像它們從未發生過)丟失?