在web开发中,Session 是一种重要的数据存储方式。Session 可用于存储用户的登录状态、存储购物车的信息和保存用户偏好设置,并在用户和服务器之间传递数据。
Express.js 框架支持使用多种方法来管理 session,包括使用 express-session 中间件和在客户端使用 cookie。在本文中,我们将介绍如何使用 express-session 中间件来更便捷地管理 session。
什么是 Session?
Session 是一种跨 HTTP 请求的持久化存储。一般情况下,Session 是在服务器端进行存储的,而不是在客户端。
每当用户访问一个网站时,服务器都会为其创建一个 session,用于存储用户数据。Session ID(一个唯一的字符串)则用于在客户端和服务器之间传递 session 数据。
Express.js 中的 Session 管理
在 Express.js 中,我们可以使用 express-session 中间件来管理 session。express-session 帮助我们在服务器端存储和管理 session 数据。使用该中间件的优点包括:
- Express.js 通过该中间件来封装 session 管理,故无需自行开发 session 管理机制。
- 该中间件提供了多种内存、文件和数据库存储方式,可按需切换。
- 该中间件提供了方便的 API,使得我们可以轻松地编写处理 session 的代码。
使用方法
首先,我们需要安装 express-session:
npm install express-session
然后,我们在 app.js 文件中启用 express-session:
var session = require('express-session');
app.use(session({
secret: 'session-secret',
resave: false,
saveUninitialized: true
}));在上述代码片段中,使用 session() 函数来配置 express-session 中间件。其中:
- secret 字段用于配置 session 的加密密钥。
- resave 字段表示是否在每次请求时强制刷新 session。
- saveUninitialized 字段表示是否在新用户第一次访问站点时创建一个 session。
我们可以将 session 存储在客户端 cookie 中,以便更轻松地进行管理。例如,以下代码片段将 session 存储在客户端 cookie 中:
app.use(session({
secret: 'session-secret',
resave: false,
saveUninitialized: true,
cookie: { secure: true }
}));在以上代码片段中,我们将 secure 字段设置为 true,以确保在 HTTPS 连接中安全传输 cookie。
Session API
express-session 提供了一些有用的 API 来管理 session。
设置 Session 数据
我们可以使用 req.session 对象来设置 session 数据,例如:
app.get('/login', function (req, res) {
req.session.username = 'Andy';
res.send('You are logged in');
});在这个例子中,我们将一个名为 username 的变量存储在 req.session 中。
获取 Session 数据
我们可以使用 req.session 对象来获取 session 数据,例如:
app.get('/user', function (req, res) {
var username = req.session.username;
res.send('Your username is ' + username);
});在这个例子中,我们使用 req.session.username 获取之前存储的 username。
删除 Session 数据
在有些情况下,我们需要删除 session 数据,例如用户注销登录。我们可以使用 delete req.session 对象来删除 session 数据,例如:
app.get('/logout', function (req, res) {
delete req.session.username;
res.send('You are logged out');
});在这个例子中,我们使用 delete req.session.username 删除之前存储的 username。
示例代码
下面是一个完整的 Express.js 应用程序示例代码,它演示了如何使用 express-session 中间件实现简单的 session 管理:
// www.javascriptcn.com code example
var express = require('express');
var session = require('express-session');
var app = express();
app.use(session({
secret: 'session-secret',
resave: false,
saveUninitialized: true
}));
app.get('/', function (req, res) {
if (req.session.views) {
req.session.views++;
res.setHeader('Content-Type', 'text/html');
res.write('<p>views: ' + req.session.views + '</p>');
res.write('<p>expires in: ' + (req.session.cookie.maxAge / 1000) + 's</p>');
res.end();
} else {
req.session.views = 1;
res.end('welcome to the session demo. refresh!');
}
});
app.listen(3000, function () {
console.log('Server running on http://localhost:3000');
});在以上例子中,我们在服务器端存储一个计数器,以记录用户在站点上的访问次数。我们使用 req.session.views 来存储计数器,并使用 req.session.cookie.maxAge 来查看存储的 cookie 的过期时间。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d63e18a941bf7134bf01ef