Dan*_*u15 8 javascript cookies ajax cors
我们计划支持将远程登录表单集成到我们的应用程序中.为此,我提供了一个启用CORS的API调用,为我们的应用程序设置身份验证cookie.ajax调用成功,响应包含cookie,但是一旦我将浏览器重定向到我们的应用程序,cookie就不再包含了.
我的设置包括在http://myhost/login.html上运行的登录表单,API登录调用在http:// myapp:8080/login(ASP.net Web Api)上运行,应用程序本身在http:/上运行/ myapp/app(ASP.net MVC)
ajax调用如下所示:
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://myapp:8080/login', true);
xhr.withCredentials = true;
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.onload = function() {
    var resp = xhr.responseText;
    if(xhr.status == 200) {
        document.querySelector('#status').innerHTML = 'Login successful <a href="http://myapp/app">Go to MyApp</a>';
    }
    else {
        document.querySelector('#status').innerHTML = 'Login Failed : ' + xhr.statusText + '<br /><pre>' + xhr.responseText + '</pre>';
    }        
};
xhr.send(JSON.stringify({ UserName: 'User', Password: 'Pass' }));
并且服务器响应:
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://myhost
Content-Length:0
Date:Fri, 23 Jun 2017 08:49:04 GMT
Server:Microsoft-HTTPAPI/2.0
Set-Cookie:MyAppToken=SecretToken; domain=myapp; path=/
当我直接调查cookie(谷歌浏览器)后,我可以看到cookie设置了正确的域名和内容.但是在页面重新加载或重定向到http:// myapp/app时,cookie不再被设置,而且我计划的自动登录也没有开始.
当我想MyAppToken在AJAX通话后在应用程序上使用时,我还需要考虑其他什么吗?我不需要访问它上面的MyAppTokencookie myhost只需要可用于myapp登录.
只改变我们的测试环境,上面描述的系统没有问题.似乎某些安全约束正在影响浏览器是否将cookie传输到目标应用程序.特别是Dennis C.提到的第三方cookie政策听起来很合理.
没有过期日期意味着您正在创建所谓的仅会话 cookie。关闭与应用程序的连接可能会导致 cookie 被清除。
这是这样创建的:
HttpCookie CrossAuth = new HttpCookie("MyAppToken", "SecretToken");
CrossAuth.Domain = refurl.DnsSafeHost;
Response.Cookies.Add(CrossAuth);
如果您希望 cookie 持续存在,请尝试添加到期日期:
HttpCookie CrossAuth = new HttpCookie("MyAppToken", "SecretToken");
CrossAuth.Domain = refurl.DnsSafeHost;
CrossAuth.Expires = DateTime.Now.AddHours(3);
Response.Cookies.Add(CrossAuth);
这应该会产生如下所示的 cookie:
| 归档时间: | 
 | 
| 查看次数: | 1274 次 | 
| 最近记录: |