【问题标题】:ASP.NET Server cannot modify cookies after HTTP headers have been sent发送 HTTP 标头后 ASP.NET 服务器无法修改 cookie
【发布时间】:2019-03-16 18:01:00
【问题描述】:

我们有一个 ASP.NET MVC 站点,其中包含一些旧版 Web 表单页面。最近在这些页面上的一些点击以日志中的以下错误结束:

System.Web.HttpException (0x80004005): Server cannot modify cookies after HTTP headers have been sent.
at System.Web.HttpCookieCollection.Add(HttpCookie cookie)
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

显然堆栈跟踪不包含任何用户代码。

我们未能重现该错误。错误发生在 GET 和 POST 以及不同的用户代理上。

Response.BufferResponse.BufferOutput 设置为 true

【问题讨论】:

  • 这发生在哪些页面上?随机出现在所有页面上还是仅出现在某个页面上?
  • @Mihai-AndreiDinculescu 在剩下的几个网络表单页面上。
  • 这个错误是不言自明的。您拥有的 Web 表单页面必须以 MVC 管道不同意的形式编写 cookie。除非您向我们展示更多代码,否则我们无法提供帮助。
  • @Mihai-AndreiDinculescu 我很困惑堆栈不包含任何用户代码,所以我无法想象哪个代码会导致错误。
  • 查看代码并查看 cookie 的设置位置应该不难。

标签: asp.net cookies webforms


【解决方案1】:

你得到的错误是不言自明的。设置响应后,您的代码会尝试添加/修改 cookie。

您需要遍历您的代码并检查编写 cookie 的部分。

即使您的代码乍一看还不错,请确保在编写 cookie 之前没有加载 async 内容。

您的帖子表明此错误是随机发生的,因此很可能是与async 有关的问题。这是一种竞争情况:有时async 在创建 cookie 之前完成,但有时却没有,因此出现随机错误。

【讨论】:

  • 站点运行在 .NET 4 和 ASP.NET MVC 3 上,所以没有异步代码。
  • 这大大简化了您的问题。您只需在发送响应后验证您的代码不会写入 cookie。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 2012-03-06
  • 2012-01-07
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 2012-01-20
相关资源
最近更新 更多