express中使用session
利用
express-session
中间件,可以使用session
来缓存信息
第一步:安装中间件;
npm install express-session --save
第二步:引入中间件;const session = require("express-session")
第三步:使用中间件;
app.set('trust proxy', 1) // trust first proxy
app.use(session({
secret: 'server-session', // 服务器生成session的签名 自定义
name: 'sessionToCookieName', // 设置session对应cookie的名称
resave: false, // 强制保存session,即使他没有变化,必须配置,否则会有警告
saveUninitialized: true, // 强制将未初始化的session存储,必须配置,否则会有警告
rolling: true, // 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
cookie: { // cookie 配置与cookie-parser的配置一致
maxAge: 1000 * 60,
secure: false,
},
}))
session的增删改查
新增、编辑、查询
// 新增和编辑
app.get('/login', (req, res) => {
req.session.username = '张三'
res.send('登录')
})
// 查询
app.get('/', (req, res) => {
var username = req.session.username
if(!username) {
res.send('session没有缓存用户姓名的信息')
} else {
res.send('用户姓名为:' + username)
}
})
删除
- 第一种方式,设置
cookie
的maxAge
为0
// 它会把所有的session都销毁 一般不用
app.get('/loginout', (req, res) => {
req.session.cookie.maxAge = 0
})
- 第二种方式,销毁指定session
// 指定session中具体的key值进行销毁
app.get('/loginout', (req, res) => {
req.session.username = null
})
- 第三种方式,调用
destroy
方法
// 会清空所有的session
req.session.destroy((err) => {
if(err) {
console.log(err)
return
}
res.send('退出登录, session清空成功')
})
session的分布式存储(存储到数据库)
利用
connect-mongo
中间件,可以将session
存储到数据库中
- 第一步:安装中间件;
npm install connect-mongo --save
- 第二步:使用中间件;
const MongoStore = require("connect-mongo")(session)
- 第三步:在
session
中配置store
属性
// connect-mongo中间件需要在session的基础上进行配置
const mongoUrl = 'mongodb://localhost:27017/shop'
app.set('trust proxy', 1) // trust first proxy
app.use(session({
secret: 'server-session', // 服务器生成session的签名 自定义
name: 'sessionToCookieName', // 设置session对应cookie的名称
resave: false, // 强制保存session,即使他没有变化,必须配置,否则会有警告
saveUninitialized: true, // 强制将未初始化的session存储,必须配置,否则会有警告
rolling: true, // 在每次请求时强行设置cookie,这将重置cookie过期时间(默认:false)
cookie: { // cookie 配置与cookie-parser的配置一致
maxAge: 1000 * 60,
secure: false,
},
store: MongoStore.create({
mongoUrl: mongoUrl // session存储的数据库地址
touchAfter: 24 * 3600, // 不管发出了多少请求 在24小时内只更新一次session 除非改变session的值
})
}))
connect-mongo
会默认在数据库中创建一个sessions
的collections
,
并向其中添加一条数据,记录存储的session
的字段