跨域问题导致设置 cookie 不生效

news/2024/5/19 15:16:09

我们看下跨域不生效的问题,首先抛出两个问题:

  1. 我们如何设置 cookie ?
  2. 又如何确定 cookie 设置是否生效了 ?

首先,我们实现一个简单的接口,新建一个 test.js 文件,将如下代码复制进去,通过 node test.js 启动服务,在本地就可以通过 http://localhost:3000/rest/collect/event/h5/v1/ 来访问了我们创建的接口了(node 环境安装的教程网上有很多详细的教程,本文不再赘述)

var express = require('express');
var app = express();
var URL = require('url')
var path = require('path');


app.post('/rest/collect/event/h5/v1/', function(req, res) {
        res.cookie('token','11111112222222224444444444')
        res.cookie('httpOnly-token','11111112222222224444444444',{ httpOnly: true })

    function User() {
            this.name;
            this.city;
            this.age;
    }

    var user = new User();

    if(params.id == '1') {

            user.name = "ligh";
            user.age = "1";
            user.city = "北京市";

    }else{
            user.name = "SPTING";
            user.age = "1";
            user.city = "杭州市";
    }

    var response = {status:1,data:user};
    res.send(JSON.stringify(response));
});

app.listen(3000);
console.log('Listening on port 3000...');

访问效果如下

接口访问效果如下

在前端代码中访问我们的接口

cookie设置

cookie查看

在浏览器中我们可以看到请求的 Resopnse Headers 里,有两个 set-cookie头部,区别在于一个带有 HttpOnly的标识,我们打开浏览器的调试窗口Application我们可以看到,两个数值都被设置到浏览器里了,httpOnly的值在浏览器调试窗口的http一栏,打了个小勾,说明这个变量是只能通过 http 请求来获取到这个cookie ,前端无法通过 js 的 document.cookie来获取到

就是无法操作的cookie

讲到这块内容,我们顺便讲下 cookie 设置的其他参数的作用

其他参数

cookie 和域名相关的哟,Domain 变量表示 cookie 生效的域名,expriesmax-age表示 cookie 的有效时间

问题描述及解决

在开发阶段我自己用node 简单的写了一个接口,便于联调前端传参问题,希望通过 http 的set-cookie 存储变量, 但是却始终没有把 cookie 成功设置到浏览器里,经过排查发现是跨域导致的 cookie 设置不生效
cookie设置

cookie查看

不生效的原因是我本地项目启动在 http://localhost:70,但是调用的接口在 http://localhost:3000上,端口不一样,存在跨域的问题,所以虽然在 Response Header 里看到了set-cookie的操作,但是在浏览器的 application里看到,并没有被设置进来,解决办法,通过nginx 代理(最长用的跨域解决办法)

扩展

跨域的问题在开发过程中比较常见,我们经常会碰到,简单来说只要请求资源的协议,域名,端口不一致,都会导致跨域,网上的解决方法也比较多,比较成熟,本文不做扩展,附带几个链接供大家参考

跨域中的预检测请求
CORS 跨域中的 Cookie
跨域资源共享 CORS 详解
Web开发中跨域的几种解决方案


http://www.niftyadmin.cn/n/3537939.html

相关文章

Oracle中各个命中率的总结及调优

Oracle中各个命中率的总结及调优 关于Oracle中各个命中率的计算以及相关的调优 1)Library Cache的命中率: .计算公式:Library Cache Hit Ratio sum(pinhits) / sum(pins) SQL>SELECT SUM(pinhits)/sum(pins) FROM V$LIBRARYCACHE; 通常在98%以上,否…

遇到跑批时快时慢、或一直变慢,作为运维DBA或开发的你,如何下手?

作者:黄远邦(笔名小y),长期活跃于国内多家银行总行生产数据中心,擅长解决Oracle方面各类疑难问题。在北京中亦安图科技股份有限公司任数据库团队技术总监。 如果您的日终跑批/清算/报表等程序时快时慢,或者从某一天以后…

(总结)MySQL自带的性能压力测试工具mysqlslap详解

PS:今天一同事问我有木有比较靠谱的mysql压力测试工具可用。其实mysql自带就有一个叫mysqlslap的压力测试工具,还是模拟的不错的。下面举例说说。mysqlslap是从5.1.4版开始的一个MySQL官方提供的压力测试工具。通过模拟多个并发客户端访问MySQL来执行压力…

MySQL进阶路:从小工到专家的必读书籍和必备工具

作者介绍 卢钧轶,DBAplus社群原创专家,目前就职于Facebook MySQL Infra Team,主要负责大规模MySQL数据库运维。在Failover、备份、监控、优化、数据库私有云等相关领域有一定经验和个人理解,曾先后就职于BesTV和大众点评网。个人博…

如何挖掘Nginx日志中隐藏的金矿?

对很多开发运维人员来说,Nginx 日志文件在被删除前可能都不会看上一眼。但实际上,Nginx 隐藏了相当丰富的信息,或许其中便蕴含着未知的金矿等你挖掘! 写在前面 Nginx(读作 Engine-X)是现在最流行的负载均衡…

性能优化知多少

1. 引言 最近一段时间,系统新版本要发布,在beta客户测试期间,暴露了很多问题,除了一些业务和异常问题外,其他都集中在性能上。有幸接触到这些性能调优的机会,当然要总结了。 性能优化是一个老生常谈的问题了…

云架构下的性能分析两实例

一、性能分析的完整思路 性能分析一直是性能实施项目中的一个难点。对于只做性能测试不做性能分析的团队来说,总是不能把问题非常显性地展示出来,不能给其他团队非常明确的引导。对于这种类型的测试实施,只能把问题抛出来,让其他相…

Netstat命令详解 如何关闭TIME_WAIT连接 如何查看nginx的访问流量

做计算机管理员,我们都必要了解一下netstat这个命令,它是一个查看网络连接状态的工具,在windows下也默认有这个工具。 Netstat命令详解 netstat命令怎样使用 如何关闭TIME_WAIT连接 如何统计web服务器的访问量 如果查看nginx的访问流量&#…