情景复现:
在一台电脑上启了两个服务,一个使用gulp的纯前端服务(地址:http://a.site.com:8080/),一个是nodejs服务(地址:http://a.site.com:8888/),浏览器中打开 http://a.site.com:8080/dist/#...,使用get请求 http://a.site.com:8888/wx-edu... nodejs中设置了cookie,在get请求的响应头中可以看到cookie, 如图所示:
但是在浏览器中chrome的控制台中却不显示,如图所示:
为什么会这样,是因为跨域么,请同事帮忙使用java的方式,跨域的情况下,可以在chrome控制台显示,只是再使用ajax的时候,没有将cookie加入请求头返回给后端
代码区
js:
var xmlhttp; if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { } } xmlhttp.open("GET","http://a.site.com:8888/wx-education/test/test.htm",true); xmlhttp.send();
nodejs代码:
方法一:
app.use( session({resave:true,saveUninitialized:
true,key:'ccc',secret: '12345', cookie: { domain:'.site.com',
httpOnly:false, maxAge: 600000 } }) );
方法二:
res.cookie("ccc", "123456", {domain: '.site.com', path: '/', expires:
new Date(Date.now() + 900000), httpOnly:false});
方法三:
res.writeHead(200, { 'Access-Control-Allow-Origin': '*', 'Set-Cookie': 'myCookie=test; Domain=site.com; Path=/;', 'Content-Type': 'text/plain' });
三种nodejs设置cookie的方式都试了,结果一致,都只在响应头中显示,chrome的Application 中不显示
另外还有一点奇怪,js中使用jquery的方式发起ajax请求,请求成功,数据正常返回,响应结果也和原生一致(即只在响应头中显示cookie,Application中不显示 ),但是jquery中ajax却进入了失败模块
$.ajax({ url: 'http://a.site.com:8888/wx-education/test/test.htm', type: 'get', dataType: 'json', success:function(data){ console.log("success"); //不执行 }, error:function(data){ console.log("error"); //执行 } });
请大神们帮忙解惑,万分感谢
如果你需要通过跨域
AJAX
发送cookie
,需要打开withCredentials
为了让这个属性生效,服务器必须显式返回
Access-Control-Allow-Credentials
这个头信息。