Redis维持session状态
Redis
Redis是什么
Redis是一个开源的、内存中的数据结构存储系统,可以用作数据库、缓存和消息代理。它支持多种数据类型,包括字符串、哈希、列表、集合和有序集合。由于它是内存级别的数据库,因此读写的速度很快。这里用来存放session最为合适。
Redis安装
Redis的使用
- Linux平台(Ubuntu20.04)
启动方法:
sudo systemctl status redis-server
- Windows平台
redis-server
时实交互:
redis-cli
另外vscode还开发了一款插件用来可视化展示redis,直接在插件市场里面搜索Redis就可以得到:
应用搭建
使用redis维持session状态
//创建Redis数据库连接
const RedisStore = connectRedis(session)
//
const redisClient = redis.createClient({
host: 'localhost',
port: 6379
})
//定义Session中间件
app.use(session({
store: new RedisStore({ client: redisClient }),
secret: 'secret$%^134',
resave: false,
saveUninitialized: false,
cookie: {
secure: false, // if true only transmit cookie over https
httpOnly: false, // if true prevent client side JS from reading the cookie
maxAge: 1000 * 60 * 10 // session max age in miliseconds
}
}))
将/路径下GET请求querystring中带有的参数及其缓存在session中
app.get("/", (req, res) => {
const sess = req.session;
//将请求保存在session中
if (req.query) {
for (let key in req.query) {
sess[key] = req.query[key];
}
}
if (sess.username && sess.password) {
if (sess.username) {
res.write(`<h1>Welcome ${sess.username} </h1><br>`)
res.write(
`<h3>This is the Home page</h3>`
);
res.end('<a href=' + '/logout' + '>Click here to log out</a >')
}
} else {
res.sendFile(__dirname + "/login.html")
}
});
访问/路径时,以json形式将session中缓存的参数内容打印到前台页面
app.get("/", (req, res) => {
const sess = req.session;
//将请求保存在session中
if (req.query) {
for (let key in req.query) {
sess[key] = req.query[key];
}
}
//将session数据以JSON格式输出
const sessionJSON = JSON.stringify(sess);
if (sess.username && sess.password) {
if (sess.username) {
res.write(`<h1>Welcome ${sess.username} </h1><br>`)
res.write(
`<h3>This is the Home page</h3>`
);
res.write( `<p>Session Data: ${sessionJSON}</p>`)
res.end('<a href=' + '/logout' + '>Click here to log out</a >')
}
} else {
res.sendFile(__dirname + "/login.html")
}
});
注:上述开发实现了前后端分离,交互使用的是Ajax。