一、 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 保存到数据库里面

  1. 需要安装 express-session 和 connect-mongo 模块
  2. 引入模块
const session = require("express-session");
const MongoStore = require('connect-mongo');
  1. 配置中间件
// 配置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 的基本使用相关推荐

  1. Nodejs进阶:express+session实现简易身份认证

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 文档概览 本文基于express.express-session ...

  2. node Error: Most middleware (like session) is no longer bundled with Express and must be installed

    今天的express项目连接mongodb数据库的时候,报了上面的错.大概的意思就是说大部分的中间件(像session)这样的不再跟express一起安装了.找了一些答案,如下: 答案:在expres ...

  3. express+socket.io 共享session

    express下socket.io使用session验证用户 作者: littlejim 时间: April 23, 2015 分类: node.js express下使用socket.io来传输用户 ...

  4. 使用express框架时,用MongoDB存放session时,出现错误,解决方法

    使用express框架时,用MongoDB存放session时,出现错误如下: D:\WorkSpace\nodejs\user\node_modules\connect-mongo\lib\conn ...

  5. Node.js session 存储的几种方法

    2019独角兽企业重金招聘Python工程师标准>>> Since the accepted answer is only connecting to remote hosts, i ...

  6. 我的node+express小例子

    启动index.js: var express = require("express"); var path = require("path"); var op ...

  7. TWaver HTML5 + Node.js + express + socket.io + redis(六)

    接上一篇TWaver HTML5 + Node.js + express + socket.io + redis(五), 这一篇将讲解如何用模版生成html页面, 如何验证用户登录, 您将了解到: 1 ...

  8. node.js Web应用框架Express入门指南

    node.js Web应用框架Express入门指南 作者: 字体:[增加 减小] 类型:转载 时间:2014-05-28 我要评论 这篇文章主要介绍了node.js Web应用框架Express入门 ...

  9. 30天了解30种技术系列---(1)现代web应用服务器-Express.js

    什么是Express.js Express是一个简洁而灵活的 Node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用. 如何使用Express.js 1.创建一个目录(即项目) ...

最新文章

  1. python自动化ppt_python自动化怎么操作ppt?
  2. SW6206超级华为快充5V5A,全协议OPPO闪充、自带电量计量、LED 灯/数码管显示
  3. CSP认证201709-1 打酱油[C++题解]:贪心
  4. springboot 优雅停机_新姿势,Spring Boot 2.3.0 如何优雅停机?
  5. FFmpeg再学习 -- SDL 环境搭建和视频显示
  6. android wifi驱动_OTT盒子WiFi方案首选:博通2T2R WiFi模块
  7. 推荐一个硬核嵌入式的原创公众号
  8. 从零开始升级基于RuleBased的聊天机器人
  9. 7月26日见!华为Mate 20 X 5G正式官宣:国内首款5G双模手机
  10. AI学习笔记(十三)CNN之人脸检测
  11. eclipse开发SVN下文件显示修改时间和提交作者的方法
  12. makefile中的notdir,wildcard和patsubst
  13. 用户登录MySQL服务器的方法
  14. MySQL按年龄段查询
  15. php chr 1,PHP chr()用法及代码示例
  16. Mac使用VMware虚拟机安装CentOS系统无法获取IP地址联网问题
  17. 二元加权电容器阵列的构造性共质心布局与布线
  18. win10有一个隐藏的超级管理员帐户,拥有全部权限,如何启用它
  19. SwiftUI实战教程 第二章 BMI计算器
  20. 人声和乐器的频谱范围

热门文章

  1. anaconda来创建python环境
  2. 热血街头Java,下载_我爱法语 V3.01 多国语言版_6z6z下载站
  3. 关于未捕获异常的处理(WPF)
  4. linux 双mipi摄像头,VS-RK3399 在linux系统下面调试Mipi camera接口介绍
  5. 重庆邮电大学计算机科学与技术培养方案,重庆邮电大学计算机科学与技术学院.doc...
  6. [Robot Framework] 怎么做数学运算?
  7. 290. Word Pattern
  8. 带日期的bean转为json(bean-JSON)
  9. ASP.NET MVC URL重写与优化(进阶篇)-继承RouteBase玩转URL(转)
  10. WinForm邮件内容编辑器的简单实现