我正在研究使用 WebHttpBinding 从 WCF 自托管控制台应用程序 REST 服务写入 cookie 的最快方法。我准备了“设置 Cookie”,但在浏览器中只设置了第一个 cookie(在 Windows 上使用 FireFox 11.0)以及“过期”值。
var expiry = DateTime.Now.AddMonths( 6 );
var outresp = WebOperationContext.Current.OutgoingResponse;
outresp.Headers.Add( HttpResponseHeader.SetCookie , "cookie1=fd9416ea-2705-4d44-be76-f2f7b95e6b13; cookie2=7d489e69-d9c9-4b8d-a4b1-bce0da1c5966;expires=" + expiry );
我还尝试在第一个 cookie 和第二个 cookie 之间加一个逗号,但这也不起作用:
outresp.Headers.Add( HttpResponseHeader.SetCookie , "cookie1=fd9416ea-2705-4d44-be76-f2f7b95e6b13;, cookie2=7d489e69-d9c9-4b8d-a4b1-bce0da1c5966;expires=" + expiry );
我把它删掉了,然后启动了 Fiddler:
outresp.Headers.Add( HttpResponseHeader.SetCookie , "foo=foovalue;,bar=barvalue;" );
Fiddler 展示了这一点:
Response sent 27 bytes of Cookie data:
Set-Cookie: foo=foovalue;,bar=barvalue;
This response did not contain a P3P Header.
Validate P3P Policies at: http://www.w3.org/P3P/validator.html
Learn more at: http://www.fiddler2.com/redir/?id=p3pinfo
这告诉我,我没有在 .NET 端格式化东西以使浏览器可以接受 cookie。
如何将所有 cookie 放入仅第一个值的浏览器 insetad 中?我错过了什么?
谢谢。
[ 编辑 ]
我将此问题提交给 Microsoft 寻求支持,并了解到这一点:
将“Set-Cookie”插入单个 cookie 行这一事实在 Microsoft 中被记录为 .NET Framework 4.0 和 Framework 4.5 的错误。在 Microsoft WCF 开发组中,该错误被列为“已关闭”和“无法修复”。
根据微软的说法,唯一的解决方法是从自托管转移到在 IIS 内托管,然后直接使用 (IIS) 响应对象(不同的代码路径没有错误)。