express+session+redis
2021/8/4 19:08:44
本文主要是介绍express+session+redis,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
- Session
- 为什么要用redis
- 原因:
- 好处:
- express+session+redis配置
Session
实现请求身份验证的方式很多,其中一种广泛接受的方式是使用服务器端产生的Session ID结合浏览器的Cookie实现对Session的管理,一般来说包括以下4个步骤:
- 服务器端的产生Session ID
- 服务器端和客户端存储Session ID
- 从HTTP Header中提取Session ID
- 根据Session ID从服务器端的Hash中获取请求者身份信息
为什么要用redis
原因:
分布式架构的流行,单个服务器已经不能满足系统的需要了,通常都会把系统部署在多台服务器上,通过负载均衡把请求分发到其中的一台服务器上;
那么很有可能第一次请求访问的 A 服务器,创建了 Session ,但是第二次访问到了 B 服务器,这时就会出现取不到 Session 的情况;
于是,分布式架构中,Session 共享就成了一个很大的问题。
好处:
- 实现了 Session 共享
- 可以水平扩展(增加 Redis 服务器)
- 服务器重启 Session 不丢失(不过也要注意 Session 在 Redis 中的刷新/失效机制)
- 不仅可以跨服务器 Session 共享,甚至可以跨平台(例如网页端和 APP 端)
express+session+redis配置
const express = require('express') const app = express() // 引入下面3个插件(都需要安装),把session存redis中 var session = require('express-session'); var redis = require('redis'); var RedisStore = require('connect-redis')(session); // 创建Redis连接配置 var redisClient = redis.createClient(6379, '127.0.0.1'); // 设置Express的Session存储中间件(跟之前session设置方法一样,只加了store项为redis存储) app.use(session({ // store session存储实例,默认为一个新的 MemoryStore 实例。 store: new RedisStore({ client: redisClient }), //只需设置这个就可存储到redis name: 'session_id', //默认connect.sid secret: 'test_mima', //设置签名秘钥 内容可以任意填写 resave: false, // 强制保存,如果session没有被修改也要重新保存,默认true(推荐false) saveUninitialized: true, //如果原先没有session那么就设置,否则不设置(推荐true) /* 设置cookie的过期时间,sessiion的过期时间会随cookie自动更改, 也可以只设置session过期时间,cookie也跟着更改(两者只能选1个,效果一样)*/ cookie: { // 全局设置cookie,就是访问随便api就会设置cookie,也可以在登录的路由下单独设置 maxAge: 1000 * 30 * 60, //过期时间(毫秒 httpOnly: true // 是否允许客户端修改cookie,(默认true 不能被修改) // secure: true //https这样的情况才可以访问cookie,默认false(推荐) }, // rolling: true //在每次请求时强行设置 cookie,这将重置 cookie 过期时间(默认:false推荐false) })); // 设置Session(在这个) // app.use((req, res, next) => { // req.session.site = { name: 'IT笔录', domain: 'itbilu.com' }; // // 过期时间(以毫秒为单位) // // req.session.cookie.maxAge = 1000 * 60 * 60 * 24 // next() // }) // 登录成功设置session(上面访问网站就发送sessionid到客户端,登录成功自动更新session数据,也可以只设置登录才发cookieid) app.get("/login", function(req, res) { req.session.userinfo = { name: "王金龙", address: "河北邯郸", age: "18" }; res.send('登录成功'); }); // 读取Session app.get("/getinfo", (req, res) => { var userinfo = req.session.userinfo; if (userinfo) { res.send(`欢迎回来,${userinfo.name}`) } else { res.send("请登录") } }) // 销毁session,但是客户端的cookie还在,重新登录会自动重新写入session app.get("/logout", (req, res) => { req.session.destroy(err => { if (err) { res.send("退出失败") } else { res.send("退出成功") } }) }) app.get('/', (req, res) => res.send('设置session和cookie成功')) app.listen(3000, () => console.log(`http://127.0.0.1:3000`))
这篇关于express+session+redis的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-26阿里云Redis项目实战:新手入门教程
- 2024-09-26阿里云Redis资料入门教程
- 2024-09-25阿里云Redis入门教程:快速掌握Redis的基本操作
- 2024-09-25阿里云Redis学习:新手入门教程
- 2024-09-21Redis资料入门教程:轻松掌握Redis基础知识
- 2024-09-21Redis资料:入门级用户必学教程
- 2024-09-21Redis资料:新手入门教程与实践指南
- 2024-09-20Redis教程:从入门到实践的全面指南
- 2024-09-20Redis教程:初学者快速入门指南
- 2024-09-20Redis教程:新手入门与实践指南