4

根据RFC,“Cookie”HTTP 标头中的各个 cookie 可以用逗号和分号分隔。但是,ASP.NET 不会正确解析逗号大小写 - 它不会将逗号视为分隔符,而是将其视为值的一部分。

例如, 如果客户端发送 header Cookie: a=b, c=d,那么 ASP.NET 应用程序将只看到一个名为“a”的 cookie,其值为“b, c=d”。

作为一种特殊情况,当客户端发送多个 Cookie 标头(每个 cookie 一个)而不是将所有 Cookie 组合在一个标头中时,也会发生同样的事情。从 HTTP 的角度来看,这是完全有效的,在这种情况下,标头的有效值应该是由逗号分隔的所有实例的值的串联。

有人知道解决方法(或者可能是修复?)吗?我绝对需要让这个工作,因为我不控制客户端。

PS 具有讽刺意味的是,根据这个线程,.NET 内置 HTTP 客户端(又名 HttpWebRequest)的行为正好相反,也会导致问题。:-)

4

3 回答 3

4

众所周知,RFC 2109 和 RFC 2965 都没有描述现实。

您应该看一下draft-ietf-httpstate-cookie,它是新 IETF httpstate 工作组的工作产品。

于 2010-03-07T09:24:50.300 回答
3

您链接到的版本已过时。这个HTTP 状态管理机制文档是最新最好的,它指定了分号。它确实说应该接受逗号以实现将来的兼容性,但这不是必需的:

注意:为了向后兼容,Cookie 标头中的分隔符处处都是分号 (;)。服务器还应该接受逗号 (,) 作为 cookie 值之间的分隔符,以便将来兼容。

于 2010-03-07T00:07:12.587 回答
0

我相信获得所需行为的最简单解决方案(无论标准正确性如何)是创建一个 HttpModule,该模块将正确解析来自 HttpContext.Request.Headers 的此信息并将更正的信息放置在 HttpContext.Request.Cookies 中。

于 2010-03-07T00:24:05.760 回答