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

  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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter1-3_Speech_Recognition(CTC, RNN-T and more)

文章目录1 CTC2 RNN-T3 Neural Transducer4 Monotonic Chunkwise Attention5 小结本文为李弘毅老师【Speech Recognition - CTC, RNN-T and more】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来自于李宏毅老师的…

java商城_基于Java,jfinal web框架开发出微信商城,微信分销商城源码分享

项目简介:专门针对微信服务号开发的一套微信商城,微信分销商城,支持商品多规格,支持按地区设置邮费,支持限时打折,订单返现,满减送,满包邮,支持订单打印,订单…

Express 路由模块化以及 Express 应用程序生成器

一、 Express 路由模块化 https://expressjs.com/en/guide/routing.html Express 中允许我们通过 express.Router 创建模块化的、可挂载的路由处理程序。 1、新建一个 user.js 配置如下代码 var express require(express) var router express.Router() router.get(/, fun…

qscrollarea 设置滚动位置_爱剪辑:影视剧滚动字幕片尾,效果竟然如此高端精美...

大家好今天教大家制作滚动字幕片尾这种效果经常在影视剧和自媒体中看到不仅好看精美,而且还高大上快来学习吧~视频教程:爱剪辑:影视剧滚动字幕片尾教程https://www.zhihu.com/video/1174030334688632832移动视频的位置导入视频后&…

iOS 测试三方 KIF 的那些事

一: KIF 三方库的配置 今天的广州天气还不错,原本想试试UI测试的,前几天也了解到很多公司都在用 KIF 这这三方框架!!今天也就试着做做,可就跪在了这个安装上,我用cocopods 导入了 KIF&#xf…

Chapter1-4_Speech_Recognition(HMM)

文章目录1 HMM用在哪里2 HMM的state3 改造成DNN3.1 Tandem3.2 DNN-HMM Hybrid本文为李弘毅老师【Speech Recognition - HMM (optional)】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。其中也涉及到了部分李琳山老师关于HMM的详解&#…

Express 结合 multer 上传图片

一、 Multer 模块介绍 Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用 于上传文件。 它是写在 busboy 之上非常高效。 注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。 https://www.npmjs.com…

ad19pcb设置恢复默认_条码打印机-斑马产品常用恢复出厂设置

当我们手上拿到条码打印机,遇到一下无法挽回的时候,我们可以选择恢复下出厂设置,这样使打印机还原到出厂,或许是很好的选择,接下来我们看下斑马条码打印机操作方法如下:Zebra 条码打印机恢复出厂1、有面板的…

Chapter1-5_Speech_Recognition(Alignment of HMM, CTC and RNN-T)

文章目录1 为什么需要Alignment2 穷举所有的alignment2.1 HMM的对齐2.2 CTC的对齐2.3 RNN-T的对齐3 小结本文为李弘毅老师【Speech Recognition - Alignment of HMM, CTC and RNN-T (optional)】的课程笔记,课程视频youtube地址,点这里👈(需翻…

mongoose 入门以及 mongoose 实现数据 的增、删、改、查

一、mongoose 介绍 Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具。Mongoose 是 NodeJS 的驱动,不能作为其他语言的驱动。 Mongoose 有两个特点 : 1、通过关系型数据库的思想来设计非关系型数据库 2、基于 mongodb 驱动&…

64位处理器_电脑操作系统的32位和64位有什么区别

想买个新电脑,不知道买 64 位还是 32 位?买了一套视频剪辑软件,发现电脑根本安装不了?这些到底是为什么?对于 Windows7 及以上版本,我们能够很明显知道自己电脑操作系统是 64 位还是 32 位。如果你还不知道…

Chapter1-6_Speech_Recognition(RNN-T Training)

文章目录1 一个alignment概率的计算2 所有alignments概率的计算3 Training4 Inference5 小结本文为李弘毅老师【Speech Recognition - RNN-T Training (optional)】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中用到的图片均来…

Mongoose 预定义模式修饰符 Getters 与 Setters 自定义修饰符

一、mongoose 预定义模式修饰符 lowercase、uppercase 、trim mongoose 提供的预定义模式修饰符,可以对我们增加的数据进行一些格式化。 var UserSchemamongoose.Schema({ name:{ type:String, trim:true }, age:Number, status:{ type:Number, default:1 } })二…

微信可以远程控制电脑吗_用微信就能远程控制电脑,这款神器有些厉害

「本期内容标签」安卓 iOS 电脑 小程序 网站 游戏 教程微信确实一步步改变生活,尤其是微信小程序面世以来,可谓是神器一个接一个的出现,很多功能已经和手机app旗鼓相当了。那么,今天说的这款刚推出的微信小程序,实现远…

开源的excel读取库libxls在windows下的编译,且支持中文,全网首发

转载请注明出处:http://www.cnblogs.com/superbi/p/5482516.html 到目前为止,网络和官网上并没有关于libxls在windows下支持中文的教程,也没有现成的二进制文件。 想直接得到结果的请直接拉到最后获取成果,想自己以后遇到类似问题…

Chapter1-7_Speech_Recognition(Language Modeling)

文章目录1 为什么需要Language Model2 N-gram3 Continuous LM3 NN-based LM4 RNN-based LM5 合并LAS和LM5.1 shallow fusion5.2 deep fusion5.3 cold fusion本文为李弘毅老师【Speech Recognition - Language Modeling】的课程笔记,课程视频youtube地址,…

Mongoose 索引、Mongoose 内置 CURD 方 法、扩展 Mongoose Model 的静态方法和 实例方法

一、Mongoose 索引 索引是对数据库表中一列或多列的值进行排序的一种结构,可以让我们查询数据库变得更 快。MongoDB 的索引几乎与传统的关系型数据库一模一样,这其中也包括一些基本的查询 优化技巧。 mongoose 中除了以前创建索引的方式,我们…

winre drv分区干嘛用的_都2020年了,还在给硬盘分区?看完你就知道有没有必要了...

电脑硬盘,到底该不该分区?很多人买了新电脑或者在电脑中安装了SSD硬盘之后,第一个步骤就是:开机-给硬盘分区。但是,大家有没有考虑过,硬盘是否真的需要分区呢?这不最近有人就在程序员社区V2EX上…

php 系列

1.给 跑在windows 环境下的php, 安装redis 拓展。(installing Redis & Redis extension in PHP on XAMPP on windows.) step 1: 安装redis server(windows) http://fellowtuts.com/php/install-redis-redis-extens…

搞懂RNN

文章目录1 什么是RNN2 LSTM3 Training3.1 Learning Target3.2 为什么难train4 应用举例4.1 Many To One4.2 Many To Many4.3 其他本文为李弘毅老师【Recurrent Neural Network(Part I)】和【Recurrent Neural Network(Part II)】的课程笔记,课程视频来源于youtube(需…