本文仅记录如标题所述场景的测试所得,因为场景有些特殊,且并不需兼容全部浏览器,因此本文的内容对读者也许并没有做用,仅为记录。ajax
基于历史缘由:跨域
服务端响应:浏览器
httpResponse.setHeader("Access-Control-Allow-Origin", "http://example.com:8080"); httpResponse.addHeader("Access-Control-Allow-Credentials", "true"); httpResponse.addHeader("Access-Control-Allow-Methods", "HEAD,POST,GET,PUT,DELETE,OPTIONS");
客户端Ajax请求时设置withCredentials
参数为true
,记得返回Cookie的首次请求和其它请求都需设置:服务器
function login() { $.ajax({ url : urlPrefix + "/LoginServlet", type : "post", xhrFields: { withCredentials : true }, success : function(data, name) { alert(data) } }); } function test() { $.ajax({ url : urlPrefix + "/BusinessServlet", type : "post", xhrFields: { withCredentials : true }, success : function(data, name) { alert(data) } }); }
测试过程:
A项目部署在a机器,B项目部署在a机器,B项目的页面跨域访问A项目
测试结果:post
设置
-> Safari
-> 阻止Cookie
-> 始终禁止
才不能经过Cookie传递SessionID测试过程:
A项目部署在a机器,B项目部署在b机器,B项目的页面跨域访问A项目。
若是a机器和b机器同属同一局域网:测试
设置
-> Safari
-> 阻止Cookie
-> 始终容许
、容许访问过的网站
、仅容许当前网站
能经过Cookie传递SessionID若是a机器和b机器其中之一属于外网:网站
设置
-> Safari
-> 阻止Cookie
-> 始终容许
才能经过Cookie传递SessionID目前还没探索出的缘由,根据测试结果,可能会改成其它实现方法,好比单点登陆后用JWT验证会话,用JSONP跨域。url