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

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

  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...');

访问效果以下node

接口访问效果以下

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

cookie设置

cookie查看

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

就是没法操做的cookie

讲到这块内容,咱们顺便讲下 cookie 设置的其余参数的做用跨域

其余参数

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

问题描述及解决

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

cookie查看

不生效的缘由是我本地项目启动在 http://localhost:70,可是调用的接口在 http://localhost:3000上,端口不同,存在跨域的问题,因此虽然在 Response Header 里看到了set-cookie的操做,可是在浏览器的 application里看到,并无被设置进来,解决办法,经过nginx 代理(最长用的跨域解决办法)app

扩展

跨域的问题在开发过程当中比较常见,咱们常常会碰到,简单来讲只要请求资源的协议,域名,端口不一致,都会致使跨域,网上的解决方法也比较多,比较成熟,本文不作扩展,附带几个连接供你们参考cors

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

相关文章
相关标签/搜索