ASP.NET Mvc Api:设置cookie然后302/303 Redirect丢失cookie

时间:2015-08-26 06:43:38

标签: asp.net api cookies http-redirect

我有一个返回HttpResponseMessage的API操作。 API地址类似于:http://localhost/login?authcode=xxx

API操作会执行一些登录身份验证,并将用户重定向到注册表或欢迎页面。代码如下:

var response = new HttpResponseMessage();
var cookie = new CookieHeaderValue("token", "ThisIsTheTokenNeeded");
response.Headers.AddCookies(new CookieHeaderValue[] { cookie });
response.StatusCode = HttpStatusCode.Found;
response.Headers.Location = new Uri("http://localhost/welcome.html");
return response;

在welcome.html中,我使用" document.write(document.cookie)"并且无法看到名为" token"的cookie。一些如何迷失。谁能告诉我如何完成这项工作或者这种架构毕竟不正确?

2 个答案:

答案 0 :(得分:7)

我找到了答案。范围未设置。在我的原始代码中,缺少以下行。

cookie.Path = "/";

由于重定向到另一个页面,即使在同一个域下,该cookie在不同页面上也无效。如果未设置路径,则Cookie仅对定位http://localhost/login?authcode=xxx

的原始请求有效

今天我了解到我需要仔细检查cookie的域名和路径属性,然后再声称有人吃了它。

答案 1 :(得分:-1)

我的cookie已添加Path,但问题仍然无法解决。

很长一段时间后,我终于通过删除web.config中的会话状态配置来解决此问题:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <!--<sessionState cookieless="false" timeout="30" mode="StateServer" stateConnectionString="tcpip=localhost:42424" />-->
  </system.web>
</configuration>

我可以在评论set-cookie之后添加<sessionState>标头。

希望对您有帮助,谢谢。