一、 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. 计算机兴趣小组活动实施方式,信息技术兴趣小组活动计划
  2. pandas.read_csv()跳过读取文件报错行
  3. 为Android应用程序添加社会化分享功能
  4. 计算机软件复用意义何在,2009计算机科学技术导论复习要点.pdf
  5. C++笔记-使用std::funcional代替函数指针
  6. 华为nova 5全新外观曝光:水滴全面屏设计 边框下巴极窄
  7. 解决ssh登录过慢问题
  8. freemarker空格问题
  9. html里面怎么引入swiper,JavaScript库——使用swiper.js创建嵌套的swiper
  10. MySQL SQL error: #1271 - Illegal mix of collations for operation 'UNION'
  11. 传微软PK谷歌 将于2014年推出智能眼镜
  12. cisco 2811路由器详细配置
  13. 淘宝广告数据分析实战!(附代码和100W数据源)
  14. 交换机和集线器的区别
  15. deepin使用印象笔记(Evernote)
  16. 端游开发用什么技术可以让用户更短时间内体验游戏?端游分发
  17. 4.7W防削顶单声道D类音频功率放大器HT6872介绍
  18. 阿里云数据库(RDS)查看空间使用情况
  19. 引爆全球 新华三首款MANO亮相英特尔网络“航展”
  20. AI遮天传 DL-深度学习在计算机视觉中的应用

热门文章

  1. notepad编译java_Notepad++直接编译运行java代码的具体步骤
  2. 前端之 JavaScript 常用数据类型和操作
  3. java 代码重用_Java 代码重用:功能与上下文重用
  4. java线程提高速度_如何在JAVA中减慢线程速度
  5. java 防止url重复请求_Web项目如何防止客户端重复发送请求
  6. sum怎么用python_python sum()函数和.sum(axis=0)函数的使用
  7. java 四舍五入_Java常用类
  8. iOS当中的设计模式
  9. gvim for php,转 : Gvim建立IDE编程环境 (Windows篇)
  10. php 接口怎么响应,Stripe PHP API方法响应的结构是什么?