2017-01-27 96 views
1

我想不出任何合适的标题。交叉来源,cookies和会话

我有两个网站在我的控制下。域A和域B.域B为域A设置所有需要的CORS头。

域A向域B发出ajax请求。通过此请求,域B上的会话被创建并且带有jsessionid的cookie被发回。

域A使用刚收到的cookie发出另一个ajax请求。某些值在域B的会话上设置。这确实按预期工作。

然后,当我打开一个新选项卡并浏览到域B时,浏览器不会从ajax请求发送cookie。这是为什么?

来自ajax请求的cookie只是暂时有效且仅对ajax请求有效?

附加测试

上述行为适用于IE 11.我只是做了在最新的Chrome测试,并没有在所有的工作。任何后续的Ajax请求都不会发送cookie。

请求示例:

$.ajax({ 
    url: url, 
    success: function() { 
     // do something 
    }, 
    xhrFields: { 
     withCredentials: true 
    } 
}); 

回答

1

尝试将withCredentials标志让你的AJAX请求时:

$.ajax({ 
    url: 'http://www.domainb.com/some-resource', 
    type: 'GET', 
    xhrFields: { withCredentials: true }, 
}); 

这将迫使浏览器坚持已跨域请求期间被设置cookie并在随后的通话中自动发送。


UPDATE:

我已经建立了工作示例这里:https://jsfiddle.net/bhL0vqe3/4/

+0

正如我所说的,第二个请求做工作。 Cookie在第二个请求上设置。我在所有ajax请求上设置了Credentials。我怀疑cookie只是针对ajax请求而不是“常规”请求持久的。这是我的问题。 – T3rm1

+0

域B上的服务器是否也将“Access-Control-Allow-Credentials”响应标头设置为“true”?您能否在此工作流程中显示通过电线发送的确切请求和响应有效载荷? –

+0

是的,否则第二个请求会表现不同。 – T3rm1