javascript - nodejs 不可以跨域( 跨端口号 )设置cookie?

查看:215
本文介绍了javascript - nodejs 不可以跨域( 跨端口号 )设置cookie?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

情景复现:

在一台电脑上启了两个服务,一个使用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

xmlhttp.withCrendentials = true;

为了让这个属性生效,服务器必须显式返回Access-Control-Allow-Credentials这个头信息。

Access-Control-Allow-Credentials: true

这篇关于javascript - nodejs 不可以跨域( 跨端口号 )设置cookie?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆