我有一个返回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。一些如何迷失。谁能告诉我如何完成这项工作或者这种架构毕竟不正确?
答案 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>
标头。
希望对您有帮助,谢谢。