2011-03-31 86 views
3

我正在C#中創建一個Web應用程序。服務器在HTTP標頭髮送後無法修改Cookie

當我的頁面加載時,我激發一個異步線程來處理一些數據。這部分處理是更新cookie。然而,當我該cookie保存到響應由

System.Web.HttpContext.Current.Response.Cookies.Add(cookie),我得到以下異常:

HttpException: Server cannot modify cookies after HTTP headers have been sent.

什麼辦法可以解決或解決這一問題?

回答

4

除非您有一個很好的理由,否則您不應該在ASP.NET請求中旋轉後臺工作線程。最終,您仍然必須等待此線程完成其工作,然後再將響應發送回瀏覽器。

聽起來好像響應流已被部分寫入,然後您的線程正在嘗試添加cookie。

我想在這裏重新考慮你的戰略,並採取以下原則讀:

Chapter 6 — Improving ASP.NET Performance - Threading Guidelines

它看起來像一個過時的文件,但原則仍然站立。如果調用數據處理器的原因是爲了防止ASP.NET工作線程阻塞並耗盡資源,因爲數據處理器長時間運行,請考慮將頁面改爲Asynchronous page

+0

「這聽起來像響應流已被部分寫入,然後你的線程正在嘗試添加cookie。」 - 是,對的。這可能嗎? – amateur 2011-03-31 23:36:52

+0

@Niall - 是的,這是可能的,但沒有看到你到底如何構建代碼,我不會推測在哪裏。 – Kev 2011-03-31 23:38:12

+0

@Niall - 查看我的更新。 – Kev 2011-03-31 23:42:17

0

如果它在preinit或init中,該怎麼辦?不知道這是否會有所幫助。 http://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events

+0

我也有這個錯誤發生在頁面的初始化事件。但是Page:Init在應用程序之前:PreSendRequestHeaders(請參閱http://chiranjeevinooli.blogspot.co.at/2009/05/application-page-and-control-events-in.html)。這裏可能會出現什麼問題? – 2015-06-24 08:52:58

1

是的,Cookies是http響應的一部分,在異步操作中,您無法在生成響應並將其發送到瀏覽器後進行任何更改。

要解決此問題,我建議在瀏覽器上構建ajax循環以獲取異步操作結果。操作完成後,您可以使用ajax響應返回cookie。

+1

有趣的 - 我可以得到一個例子,可以如何設置? – amateur 2011-04-01 00:38:03

相關問題