【问题标题】:Server cannot modify cookies after HTTP headers have been sent发送 HTTP 标头后服务器无法修改 cookie
【发布时间】:2011-07-27 07:51:06
【问题描述】:

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

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

将 cookie 保存到响应中时

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

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

有什么办法可以解决或解决这个问题?

【问题讨论】:

    标签: c# asp.net cookies httpcookie httpexception


    【解决方案1】:

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

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

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

    Chapter 6 — Improving ASP.NET Performance - Threading Guidelines

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

    【讨论】:

    • "听起来响应流已经被部分写入,然后你的线程正在尝试添加 cookie。" - 是,对的。这可能吗?
    • @Niall - 是的,这是可能的,但如果没有确切地看到你是如何构建代码的,我不会推测在哪里。
    【解决方案2】:

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

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

    【讨论】:

    • 有趣 - 我能举个例子来说明如何设置吗?
    【解决方案3】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 1970-01-01
    • 2012-03-06
    • 2015-12-05
    • 1970-01-01
    • 2011-09-13
    相关资源
    最近更新 更多