在node中session与redis的使用及遇到问题的处理

使用场景

session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登陆信息保存。
可以保存一些客户的常用信息,当客户端再次获取常用信息时,不必再从数据库中进行查询。
在使用session时数据会直接存储在内存中,数据过大会造成溢出,所以session需要配合数据库使用,这里使用redis存储session数据

使用redis需要在服务器中安装redis

node项目引入

npm install express-session --save
npm install redis connect-redis express-session --save

使用

const session = require('express-session');
const redis = require('redis')
let RedisStore = require('connect-redis')(session)
let client = redis.createClient()
app.use(session({
    store: new RedisStore({client}),
    secret: "secret",//相当于一个加密密钥,值可以是任意字符串
    resave: false,//强制session保存到session store中
    cookie: {
        maxAge: 1000 * 60 * 60,//设置有效时间,单位毫秒
    },
    saveUninitialized: false//强制没有‘初始化’的session保存到storage中
}))

session初始化需要在路由前面,否则会报session is undefined错误

session获取

app.get('/setSession', function (req, res) {
    req.session.test = 123;
    res.end();
});
app.get('/getSession', function (req, res) {
    console.log(req.session.test);
    res.end();
});

如果请求跨域会碰到获取不到req.session.test的情况。实际上,这是浏览器的同源策略导致的问题:不允许JS访问跨域的Cookie。

跨域设置

后端

引入cors

npm install cors --save

设置

const cors=require('cors');
app.use(cors({
    origin: 'http://localhost:3000',
    credentials: true
}));

origin: 配置Access-Control-Allow-Origin CORS标头,默认为’*’,这里一定要设置为前端域名,否则cookie不会带到后端

前端

引入axios

npm install axios --save

设置

axios.defaults.withCredentials = true;//axios请求带上cookie

axios开启withCredentials后,服务器才能拿到cookie

永久链接: https://blog.qianxiaoduan.com/archives/1266

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值