3

我正在通过 ajax(angularJs,但也尝试过 jQuery)调用服务器。响应包含一个 cookie,但是由于某种原因,该 cookie 没有保留在客户端上。我可以在响应中看到 Set-cookie 标头,但 cookie 不会出现在 Chrome 的开发工具中,也不会出现在服务器上的后续请求中。

这是一个服务器代码(这是 WebAPI):

HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.AddCookies(new[] { new CookieHeaderValue("auth", "my cookie content") { Expires = DateTime.Now.AddDays(7), Domain = "/" } });
IContentNegotiator negotiator = Configuration.Services.GetContentNegotiator();
ContentNegotiationResult result = negotiator.Negotiate(typeof(LoggedInModel), Request, Configuration.Formatters);
response.Content = new ObjectContent<LoggedInModel>(new LoggedInModel { Email = model.Email }, result.Formatter);
return response;

没有什么,真的,我可以再次看到 cookie 标题。这是响应中的 cookie 标头:

Set-Cookie:auth=some-value-here; 过期=格林威治标准时间 2013 年 3 月 25 日星期一 20:39:43;域=/

我试图从 IIS 运行它,所以它不是 localhost-something - 没有帮助。

它不是 CORS,同一台服务器,ajax 调用是对“/api/blah”类型的地址进行的。

任何想法我错过了什么?

4

1 回答 1

-1

需要在 cookie 上设置路径……呃!基本上,在创建 cookie 时,请确保您设置了路径属性:

var cookie = new CookieHeaderValue("auth", "blah") { Expires = DateTime.Now.AddDays(7), Path = "/", HttpOnly = true };

同样,这是 web api,我相信 MVC 默认设置它 - 至少我在创建 cookie 时不必指定路径。

于 2013-03-19T15:24:09.093 回答