2011-03-31 136 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

相关问题