Express.js 是一个流行的 Node.js 框架,用于构建 Web 应用程序。在许多 Web 应用程序中,会使用 Sessions 来保持用户的登录状态和其他会话相关数据。本文将介绍如何在 Express.js 中使用 Sessions。
Sessions 是什么?
Session 是指在服务器上存储的用户状态信息,这些信息可以存储在内存中、数据库中或者在 Redis 等缓存中。Session 可以用于存储用户身份验证信息、购物车数据、用户个性化设置等。
Session 通常由服务器分配一个唯一的 ID,这个 ID 会在用户登录时存储在 Cookie 中,以便在用户浏览不同的页面时跟踪其状态信息。
在 Express.js 中生成 Session
首先使用 npm 安装 express-session
包:
npm install express-session
然后在 app.js 或 index.js 中启用 Session 中间件:
const session = require('express-session'); app.use(session({ secret: 'my-secret', resave: false, saveUninitialized: false, }));
上面的代码中,secret
是一个随机密钥,用于对会话数据进行加密。resave
和 saveUninitialized
分别表示每次请求是否重新保存 session 和是否在保存新的 session 之前先创建一个新的 session,建议将两个属性都设为 false
,以便优化性能和减少存储空间的消耗。
在 Session 中存储数据
要在 session 中存储数据,可以使用 req.session
对象。例如,要在 session 中存储当前用户的用户名:
app.get('/', (req, res) => { req.session.username = 'John Doe'; res.send('Username saved in session.'); });
从 Session 中读取数据
要从 session 中读取数据,可以使用 req.session
对象。例如,要从 session 中读取保存的用户名:
app.get('/', (req, res) => { const username = req.session.username; res.send(`Hello ${username}`); });
Session 的生存周期
Session 的生存周期取决于浏览器关闭或者会话过期到期时间。过期时间可以在 Session 中间件的选项中设置。例如,将 session 过期时间设置为 1 小时:
app.use(session({ secret: 'my-secret', resave: false, saveUninitialized: false, cookie: { maxAge: 3600 * 1000 } // 1 hour }));
验证 Session
使用 session 时,必须时刻记得验证 session 是否存在和有效。下面是一个示例验证 session 的中间件:
-- -------------------- ---- ------- -------- ----------------- ---- ----- - -- ------------ -- --------------------- - ------ ------- - ---- - ------ -------------------------- ---- -- ------ ------ - - ------------------- ------------- ----- ---- -- - ----------------- -- ---- -------- --------------------------- ---
上面的代码中,requireLogin
是一个中间件函数,它检查 req.session.username
是否存在,如果不存在则返回 401 状态码。
总结
本文介绍了如何在 Express.js 中使用 Sessions。使用 Session 可以轻松地保存用户状态信息和其他会话相关数据。需要注意的是,每次请求都必须验证 Session 是否存在和有效,以保护应用程序免受会话劫持和其他安全问题的影响。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/644f7cff980a9b385b8f4092