node + express + session + redis 进行持久化缓存
# 需求
在node项目中记录用户信息,把session存入redis中去
# 分析
利用express-session 和 redis结合,把数据存入到redis中 利用到的一些第三方库
npm i express-session connect-redis ioredis -S
# 实现
- 生成redis实例client(必需有client,网上方法有的直接把配置放进去,我这个版本不行,会报错)
- 应用中间件session,参数为一些值,主要的为store,存储地点redisStore
- 在请求中可以给req.session赋值,也可以读值
- 启动应用
# 代码
const express = require('express')
const session = require('express-session')
const connectRedis = require('connect-redis')
const IORedis = require('ioredis')
const RedisStore = connectRedis(session);
const redisClient = new IORedis({
"host": "148.70.216.46",
"port": 6379,
"db": 0,
"password": "fang674123",
"prefix": "fd:"
});
const redisStore = new RedisStore({client: redisClient});
const app = express()
app.use(session({
"secret": "fangdown-sign", //通过设置的secret字符串,来计算hash值并放在cookie中,使产生的signedCookie防篡改
"name": "fd", // 设置cookie中,保存session的字段名称,默认为connect.sid
"rolling": true, // 每个请求都重新设置一个cookie,默认为false
"resave": true, // 即使session没有被修改,也保存session值,默认为true
"saveUninitialized": false, // 强制未初始化的session保存到数据库
"cookie": {
"maxAge": 86400000,
},
store: redisStore
}))
app.get('/', (req, res) => {
if(req.session && req.session.isVisit || req.cookies.isFirst){
req.session.isVisit+=1
res.send(`<p>第 ${req.session.isVisit}次来此页面</p>`)
}else{
req.session.isVisit = 1
res.cookie('isFirst', 1);
res.send('欢迎第一次访问')
}
})
app.listen(10000, () =>{
console.log('app is start on 10000')
})
# 查看redis数据
keys *
127.0.0.1:6379> keys *
1) "sess:L25ajrpQ5yCcF8B2WugG1JKxU42qIrph"
2) "wechat-ticket"
3) "wechat-token"
127.0.0.1:6379>
# 参考
express如何使用session与cookie (opens new window) node+express+redis的简单应用(将Session存放到Redis中) (opens new window) node中Session持久化与Redis缓存 (opens new window) Express + Session 实现登录验证 (opens new window) express-session使用 (opens new window)
上次更新: 2021/12/19, 18:05:42