vue-resource跨域和Node session保存问题

w(゚Д゚)w最近在用vue-cli和Node写一个带后台的项目,在登录模块时前端向后台发起请求,登录成功后后台给req.session加了一个infor属性,之后的请求通过判断有无req.session.infor属性从而判断用户是否登录

1.关于跨域问题

首先是设置response的请求头:

var express = require('express');   //引入express
const server = express();           //创建服务
//设置响应头
server.all('*', function(req, res, next) {
    res.header('Access-Control-Allow-Origin', "*");
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",'3.2.1')
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
});

header(‘Access-Control-Allow-Origin :’.$origin); //允许的域名( * 所有域)
header(‘Access-Control-Allow-Methods : POST’); //允许的方法
header(‘Access-Control-Allow-Headers : x-requested-with ,
content-type’); //服务器支持的头信息

2.session存储的问题

这一块我在写的时候一直是登录成功后设置req.session.infor = res.result.infor,并且会给浏览器设置res.cookie(‘user’,result.infor ,{ maxAge :20*60*1000, signed : true});
成功,但是在第二次请求的时候,req.session.infor = undefined,并且请求没有带上user后台输出的结果如下图:
这里写图片描述
这里写图片描述
问题很明显,就是后台没有存到session,而且没有带上user(cookie),原因是因为使用的vue-resource跨域请求,需要给请求中加上withCredentials: true参数,并且要后台允许提交cookie,Access-Control-Allow-Credentials:true,这样才会接收前端发来的cookie。

//vue-resource发送请求修改:
//登录请求,凡是要验证身份的请求均带上withCredentials: true
this.$http.post('http://localhost:8000/users/log', params, { emulateJSON : true,withCredentials: true}).then(function(res) {
    //dosomething
})

//server修改如下
server.all('*', function(req, res, next) {
    res.header("Access-Control-Allow-Headers", "X-Requested-With");
    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
    res.header("X-Powered-By",'3.2.1')
    res.header("Content-Type", "application/json;charset=utf-8");
    //设为指定的域
    res.header('Access-Control-Allow-Origin', "http://localhost:8080");
    //设置Access-Control-Allow-Credentials为true
    res.header('Access-Control-Allow-Credentials', true); 
    next();
});

以下是CORS协议规定的HTTP头,用来进行浏览器发起跨域资源请求时进行协商:
1. Origin。HTTP请求头,任何涉及CORS的请求都必需携带。
2. Access-Control-Request-Method。HTTP请求头,在带预检(Preflighted)的跨域请求中用来表示真实请求的方法。
3. Access-Control-Request-Headers。HTTP请求头,在带预检(Preflighted)的跨域请求中用来表示真实请求的自定义Header列表。
4. Access-Control-Allow-Origin。HTTP响应头,指定服务器端允许进行跨域资源访问的来源域。可以用通配符*表示允许任何域的JavaScript访问资源,但是在响应一个携带身份信息(Credential)的HTTP请求时,Access-Control-Allow-Origin必需指定具体的域,不能用通配符。
5. Access-Control-Allow-Methods。HTTP响应头,指定服务器允许进行跨域资源访问的请求方法列表,一般用在响应预检请求上。
6. Access-Control-Allow-Headers。HTTP响应头,指定服务器允许进行跨域资源访问的请求头列表,一般用在响应预检请求上。
7. Access-Control-Max-Age。HTTP响应头,用在响应预检请求上,表示本次预检响应的有效时间。在此时间内,浏览器都可以根据此次协商结果决定是否有必要直接发送真实请求,而无需再次发送预检请求。
8. Access-Control-Allow-Credentials。HTTP响应头,凡是浏览器请求中携带了身份信息,而响应头中没有返回Access-Control-Allow-Credentials: true的,浏览器都会忽略此次响应。

这里写图片描述
第二次请求cookie中带上了user
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值