服务器在HTTP头已发送后无法修改Cookies。

3

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

当我的页面加载时,我会启动一个异步线程来处理一些数据。其中一部分处理是更新cookie。然而,当我通过

System.Web.HttpContext.Current.Response.Cookies.Add(cookie)将cookie保存到响应中时,会出现以下异常:

HttpException: 服务器在HTTP头已发送后无法修改cookie。

有没有什么方法可以解决或修复这个问题?

3个回答

4
除非你有非常好的理由,否则不应该在ASP.NET请求中启动后台工作线程。最终,你仍然需要等待该线程完成其工作,然后才能将响应发送回浏览器。
听起来像是响应流已经部分写入,然后你的线程试图添加cookie。
我建议重新考虑你的策略,并阅读以下准则: 第6章-改进ASP.NET性能-线程指南 这似乎是一个过时的文档,但原则仍然适用。如果调用数据处理器的原因是为了防止ASP.NET工作线程阻塞并使用资源,因为数据处理器运行时间长,则考虑将页面设置为异步页面

“听起来响应流已经部分写入,然后你的线程试图添加 cookie。” - 是的,正确的。这是可能的吗? - amateur
@Niall - 是的,这是可能的,但是如果我不知道你具体如何构建代码,我就无法猜测在哪里。 - Kev

1

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

为了解决这个问题,我建议在浏览器上构建一个 ajax 循环来获取异步操作结果。当操作完成时,您可以通过 ajax 响应返回一个 cookie。


1
有趣 - 我能得到一个关于如何设置的例子吗? - amateur

0

我在页面的Init事件中也遇到了这个错误。但是Page: Init在Application: PreSendRequestHeaders之前(请参见http://chiranjeevinooli.blogspot.co.at/2009/05/application-page-and-control-events-in.html)。这里可能出了什么问题? - Krisztián Balla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接