发送HTTP标头后,服务器无法修改cookie

时间:2011-03-31 23:24:52

标签: c# asp.net cookies httpcookie httpexception

我正在用C#创建一个Web应用程序。

当我的页面加载时,我会触发一个异步线程来处理一些数据。此处理的一部分是更新cookie。但是当我通过

将cookie保存到响应时

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

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

我可以解决或解决这个问题吗?

3 个答案:

答案 0 :(得分:4)

除非你有充分的理由,否则你不应该在ASP.NET请求中启动后台工作线程。最终,在将响应发送回浏览器之前,您仍需要等待此线程完成其工作。

听起来响应流已被部分写入,然后您的线程正在尝试添加cookie。

我会在此重新考虑您的策略,并阅读以下指南:

  

Chapter 6 — Improving ASP.NET Performance - Threading Guidelines

它看起来像一个过时的文件,但原则仍然存在。如果调用数据处理器的原因是为了防止ASP.NET工作线程因为数据处理器长时间运行而阻塞和耗尽资源,那么请考虑将页面改为Asynchronous page

答案 1 :(得分:1)

是的,Cookie是http响应的一部分,在异步操作中,在生成响应并将其发送到浏览器后,您无法更改任何内容。

要解决此问题,我建议在浏览器上构建一个ajax循环以获取异步操作结果。操作完成后,您可以返回带有ajax响应的cookie。

答案 2 :(得分:0)

如果是preinit或init怎么办?不确定这是否会有所帮助。 http://msdn.microsoft.com/en-us/library/ms178472.aspx#lifecycle_events