什么是session
session运行在服务器端,当客户端第一次访问服务器时,可以将客户的登录信息保存。 session可以和redis或者数据库等结合做持久化操作,当服务器挂掉时也不会导致某些session信息丢失。
在node(express)中使用session,并且持久化保存在Redis中
安装session模块和Redis模块
在node(express)中使用session需要先安装cookie-parser
和express-session
模块。 为了持久化保存session我们使用Redis,需要安装redis
和connect-redis
模块。
模块安装方法
npm install cookie-parser express-session redis connect-redis --save
引入配置
// express 模块
var express = require('express');
// session 模块
var cookieParser = require('cookie-parser');
var session = require('express-session');
// redis 模块
var redis = require('redis');
var client = redis.createClient('6379', '127.0.0.1');// 默认监听6379端口,'127.0.0.1'为你本地ip(默认不需要修改)
var RedisStore = require('connect-redis')(session);
// 执行express
var app = express();
// 运行cookieParser 方法
app.use(cookieParser());
// redis 链接错误
client.on("error", function(error) {
console.log(error);
});
//配置 session
var identityKey = 'skey';
app.use(session({
name: identityKey,
secret: 'sessiontest', // 用来对session id相关的cookie进行签名
store: new RedisStore(), // (使用redis的存储session)
saveUninitialized: false, // 是否自动保存未初始化的会话,建议false
resave: false, // 是否每次都重新保存会话,建议false
cookie: {
maxAge: 10*60 * 1000 // 有效期,单位是毫秒, 这里设置的是10分钟
}
}));
// 检测 session是否正常
app.use(function (req, res, next) {
if (!req.session) {
return next(new Error('session错误'))
}else {
console.log(req.session)//正常打印当前session
}
next() // 正常 载入下一个中间件
})
复制代码
使用session
读取session
使用req.session.username
(username为你储存的session的key名)即可读到当前session中的username对象
设置session
使用req.session.username='yonghuming'
即可为session的username这个key值赋值
express-session的一些其他操作方法:
Session.regenerate() 将已有session初始化。
req.session.regenerate(function(err) {
// will have a new session here
})
复制代码
Session.destroy() 删除session,当检测到客户端关闭时调用。
req.session.destroy(function(err) {
// cannot access session here
})
复制代码
Session.save() 保存session。
req.session.save(function(err) {
// session saved
})
复制代码
Session.reload() 当session有修改时,刷新session。
req.session.reload(function(err) {
// session updated
})
复制代码