Express Session 的基本使用
一、 Session 简单介绍
session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session 保存在服务器上。
Cookie 数据存放在客户的浏览器上,Session 数据放在服务器上。Session 相比 Cookie 要 更安全一些。由于 Session 保存到服务器上,所以当访问量增多的时候,会比较占用服务器 的性能。单个 cookie 保存的数据大小不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。Session 没有这方面的限制。Session 是基于 Cookie 进行工作的。
二、 Session 的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一 个类似于 key,value 的键值对, 然后将 key(cookie)返回到浏览器(客户)端,浏览器下次 再访问时,携带 key(cookie),找到对应的 session(value)。
三、 express-session 的使用
https://www.npmjs.com/package/express-session
1、安装 express-session
cnpm install express-session --save
2、引入 express-session
var session = require("express-session");
3、 设置官方文档提供的中间件
app.use(session({ secret: 'keyboard cat', resave: true, saveUninitialized: true }))
4、使用
设置值
req.session.username = "张三";
获取值
req.session.username
四、 express-session 的常用参数
app.use(session({ secret: '12345', name: 'name', cookie: {maxAge: 60000}, resave: false, saveUninitialized: true
}));
五、 express-session 的常用方法
req.session.destroy(function(err) { /*销毁 session*/ })
req.session.username='张三'; //设置 session
req.session.username //获取 session
req.session.cookie.maxAge=0; //重新设置 cookie 的过期时间,它会销毁所有的session
const express = require("express")
const ejs = require("ejs")
const bodyParser = require("body-parser")
const cookieParser = require('cookie-parser')
const session = require('express-session')
const app = new express()
// 配置模板引擎
app.engine("html", ejs.__express)
app.set("view engine", "html")
// 配置静态web目录
app.use(express.static("static"))// 配置第三方中间件
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// 配置cookieParser中间件
app.use(cookieParser("zep"))
// 配置session的中间件
app.use(session({secret: 'keyboard cat', // 服务器端生成session的签名name: "sessionName", // 修改session对应的cookie的名称resave: false, // 强制保存 session ,即使它并没有变化saveUninitialized: true, // 强制将未初始化的session存储cookie: { maxAge: 1000*60, // 设置过期时间为一分钟secure: false // true 表示只有https协议才能访问cookie},rolling: true // 在每次请求时强行设置cookie,这将重置cookie的过期时间(默认值为false)
}))
app.get("/book", (req, res)=> {// 设置sessionreq.session.username = "张三三"res.send("book页面")
})
app.get("/getbook", (req, res)=> {// 获取sessionif(req.session.username) {res.send(req.session.username + "-已登录")} else {res.send("没有登录")}
})app.get("/", (req, res)=> {// 设置cookie 如果cookie没有过期的话,关闭浏览器后重新打开,cookie仍然还在,不会被销毁res.cookie("username", "张三", {maxAge: 1000*60*60,signed: true})res.send("首页")
})app.get("/article", (req, res) => {// 获取cookielet username = req.cookies.usernameconsole.log(username)res.send("新闻页面--" + username)
})app.get("/user", (req, res) => {// 获取加密的cookielet username = req.signedCookies.usernameres.send("用户页面--" + username)
})app.get("/login", (req, res)=> {// 设置sessionreq.session.username = "张三啊"res.send("执行登录")
})app.get("/loginOut", (req, res)=> {// 1.设置session的过期时间为0//req.session.cookie.maxAge = 0// 2.销毁指定的session//req.session.username = ""// 3.销毁所有的sessionreq.session.destroy()res.send("退出登录")
})app.post("/doLogin", (req, res)=> {var body = req.bodyconsole.log(body)res.send("执行提交")
})app.listen(3000)
六、 负载均衡配置 Session,把 Session 保存到数据库里面
- 需要安装 express-session 和 connect-mongo 模块
- 引入模块
const session = require("express-session");
const MongoStore = require('connect-mongo');
- 配置中间件
// 配置session的中间件
app.use(session({secret: 'keyboard cat', // 服务器端生成session的签名name: "sessionName", // 修改session对应的cookie的名称resave: false, // 强制保存 session ,即使它并没有变化saveUninitialized: true, // 强制将未初始化的session存储cookie: { maxAge: 1000*60, // 设置过期时间为一分钟secure: false // true 表示只有https协议才能访问cookie},rolling: true, // 在每次请求时强行设置cookie,这将重置cookie的过期时间(默认值为false)store: MongoStore.create({mongoUrl: 'mongodb://admin:admin@localhost/itying?authSource=admin&w=1',// mongoOptions: advancedOptions ,touchAfter: 24 * 3600 // 不管发出了多少请求,在24小时内,只更新一次session,除非你改变了这个session})
}))
const express = require("express")
const ejs = require("ejs")
const bodyParser = require("body-parser")
const cookieParser = require('cookie-parser')
const session = require('express-session')
const MongoStore = require('connect-mongo');const app = new express()
// 配置模板引擎
app.engine("html", ejs.__express)
app.set("view engine", "html")
// 配置静态web目录
app.use(express.static("static"))// 配置第三方中间件
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
// 配置cookieParser中间件
app.use(cookieParser("zep"))
// 配置session的中间件
app.use(session({secret: 'keyboard cat', // 服务器端生成session的签名name: "sessionName", // 修改session对应的cookie的名称resave: false, // 强制保存 session ,即使它并没有变化saveUninitialized: true, // 强制将未初始化的session存储cookie: { maxAge: 1000*60, // 设置过期时间为一分钟secure: false // true 表示只有https协议才能访问cookie},rolling: true, // 在每次请求时强行设置cookie,这将重置cookie的过期时间(默认值为false)store: MongoStore.create({mongoUrl: 'mongodb://admin:admin@localhost/itying?authSource=admin&w=1',// mongoOptions: advancedOptions ,touchAfter: 24 * 3600 // 不管发出了多少请求,在24小时内,只更新一次session,除非你改变了这个session})
}))
app.get("/book", (req, res)=> {// 设置sessionreq.session.username = "张三三"res.send("book页面")
})
app.get("/getbook", (req, res)=> {// 获取sessionif(req.session.username) {res.send(req.session.username + "-已登录")} else {res.send("没有登录")}
})app.get("/", (req, res)=> {// 设置cookie 如果cookie没有过期的话,关闭浏览器后重新打开,cookie仍然还在,不会被销毁res.cookie("username", "张三", {maxAge: 1000*60*60,signed: true})res.send("首页")
})app.get("/article", (req, res) => {// 获取cookielet username = req.cookies.usernameconsole.log(username)res.send("新闻页面--" + username)
})app.get("/user", (req, res) => {// 获取加密的cookielet username = req.signedCookies.usernameres.send("用户页面--" + username)
})app.get("/login", (req, res)=> {// 设置sessionreq.session.username = "张三啊"res.send("执行登录")
})app.get("/loginOut", (req, res)=> {// 1.设置session的过期时间为0//req.session.cookie.maxAge = 0// 2.销毁指定的session//req.session.username = ""// 3.销毁所有的sessionreq.session.destroy()res.send("退出登录")
})app.post("/doLogin", (req, res)=> {var body = req.bodyconsole.log(body)res.send("执行提交")
})app.listen(3000)
Express Session 的基本使用相关推荐
- Nodejs进阶:express+session实现简易身份认证
本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 文档概览 本文基于express.express-session ...
- node Error: Most middleware (like session) is no longer bundled with Express and must be installed
今天的express项目连接mongodb数据库的时候,报了上面的错.大概的意思就是说大部分的中间件(像session)这样的不再跟express一起安装了.找了一些答案,如下: 答案:在expres ...
- express+socket.io 共享session
express下socket.io使用session验证用户 作者: littlejim 时间: April 23, 2015 分类: node.js express下使用socket.io来传输用户 ...
- 使用express框架时,用MongoDB存放session时,出现错误,解决方法
使用express框架时,用MongoDB存放session时,出现错误如下: D:\WorkSpace\nodejs\user\node_modules\connect-mongo\lib\conn ...
- Node.js session 存储的几种方法
2019独角兽企业重金招聘Python工程师标准>>> Since the accepted answer is only connecting to remote hosts, i ...
- 我的node+express小例子
启动index.js: var express = require("express"); var path = require("path"); var op ...
- TWaver HTML5 + Node.js + express + socket.io + redis(六)
接上一篇TWaver HTML5 + Node.js + express + socket.io + redis(五), 这一篇将讲解如何用模版生成html页面, 如何验证用户登录, 您将了解到: 1 ...
- node.js Web应用框架Express入门指南
node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...
- 30天了解30种技术系列---(1)现代web应用服务器-Express.js
什么是Express.js Express是一个简洁而灵活的 Node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用. 如何使用Express.js 1.创建一个目录(即项目) ...
最新文章
- 计算机兴趣小组活动实施方式,信息技术兴趣小组活动计划
- pandas.read_csv()跳过读取文件报错行
- 为Android应用程序添加社会化分享功能
- 计算机软件复用意义何在,2009计算机科学技术导论复习要点.pdf
- C++笔记-使用std::funcional代替函数指针
- 华为nova 5全新外观曝光:水滴全面屏设计 边框下巴极窄
- 解决ssh登录过慢问题
- freemarker空格问题
- html里面怎么引入swiper,JavaScript库——使用swiper.js创建嵌套的swiper
- MySQL SQL error: #1271 - Illegal mix of collations for operation 'UNION'
- 传微软PK谷歌 将于2014年推出智能眼镜
- cisco 2811路由器详细配置
- 淘宝广告数据分析实战!(附代码和100W数据源)
- 交换机和集线器的区别
- deepin使用印象笔记(Evernote)
- 端游开发用什么技术可以让用户更短时间内体验游戏?端游分发
- 4.7W防削顶单声道D类音频功率放大器HT6872介绍
- 阿里云数据库(RDS)查看空间使用情况
- 引爆全球 新华三首款MANO亮相英特尔网络“航展”
- AI遮天传 DL-深度学习在计算机视觉中的应用
热门文章
- notepad编译java_Notepad++直接编译运行java代码的具体步骤
- 前端之 JavaScript 常用数据类型和操作
- java 代码重用_Java 代码重用:功能与上下文重用
- java线程提高速度_如何在JAVA中减慢线程速度
- java 防止url重复请求_Web项目如何防止客户端重复发送请求
- sum怎么用python_python sum()函数和.sum(axis=0)函数的使用
- java 四舍五入_Java常用类
- iOS当中的设计模式
- gvim for php,转 : Gvim建立IDE编程环境 (Windows篇)
- php 接口怎么响应,Stripe PHP API方法响应的结构是什么?