当前位置: 首页 > 后端技术 > Node.js

跨域问题导致cookies不生效

时间:2023-04-03 22:59:52 Node.js

再来看看跨域不生效的问题。首先,我们提出两个问题:我们如何设置cookies?以及如何判断cookie设置是否生效?首先我们实现一个简单的接口,新建一个test.js文件,将以下代码复制进去,通过nodetest.js启动服务,本地通过http://localhost:3000/rest/collect/event/h5/v1/来访问我们创建的界面(node环境安装教程网上有很多详细教程,本文不再赘述)varexpress=require('express');varapp=express();varURL=require('url')varpath=require('path');app.post('/rest/collect/event/h5/v1/',function(req,res){res.cookie('token','11111112222222224444444444')res.cookie('httpOnly-token','11111112222222224444444444',{httpOnly:true})functionUser(){this.name;this.city;this.age;}varuser=newUser();if(params.id=='1'){user.name="ligh";user.age="1";user.city="北京";}else{user.name="SPTING";user.age="1";user.city="杭州市";}varresponse={status:1,data:user};res.send(JSON.stringify(response));});app.听(3000);console.log('正在监听3000端口...');访问效果如下。在前端代码中访问我们的界面。在浏览器中,我们可以看到请求的ResopnseHeaders中有两个set-cookieheader。不同的是它和HttpOnly是一个标识,我们打开浏览器调试窗口Application可以看到浏览器中已经设置了这两个值,并且在浏览器调试窗口的http栏中标注了httpOnly的值。打勾,表示这个变量只能通过http请求获取,前端无法通过jsdocument.cookie获取哟,Domain变量表示cookie生效的域名,expries和max-age表示有效饼干的时间。问题描述及解决方案在开发阶段,我简单的用node写了一个接口,方便联调前端传参问题。希望通过httpset-cookiestoresvariables,但是浏览器一直没有成功设置cookie。经排查发现是跨域导致cookie设置不生效。原因是我本地的项目是从http://localhost:70开始的,但是调用接口是在http://localhost:3000上的,端口不一样,存在跨域问题,所以虽然设置了-cookie操作是在ResponseHeader中看到的,在浏览器应用中是看不到的解决办法是在开发过程中通过nginx代理(最长的跨域解决方案)扩展跨域问题。我们经常遇到。简单的说,只要请求资源的协议、域名、端口不一致,就会导致跨域,网上有很多解决方案,都比较成熟。本文不再展开,附上几个链接供大家参考。跨域中预检测请求CORSCookie跨域资源共享CORS跨域的几种解决方案