Express.js 中如何使用 Cookie 和 Session
介绍
在 Web 应用程序中保存状态信息对于用户而言是非常重要的。例如,要在应用中保持用户的登录状态,或者将用户的浏览历史或购物车信息保存在服务器中,以便用户可以随时访问。
本文将介绍如何在 Express.js 中使用 Cookie 和 Session 来管理状态信息。
什么是 Cookie?
Cookie 是 Web 服务器用于在客户端存储信息的一种机制。当 Web 服务器返回响应时,它可以在响应中包含一个名为 Set-Cookie
的标头,以将一个或多个 Cookie 发送回客户端。客户端将保存这些 Cookie 并在所有访问同一域的请求中发送它们。
每个 Cookie 都由名称、值、过期时间和其他可选属性组成。Cookie 只能存储少量文本数据,例如用户的首选语言或网站的主题。Cookie 不能用于存储敏感信息,例如密码或信用卡信息。
以下代码演示如何创建和设置一个 cookie:
res.cookie('name', 'value', { maxAge: 900000, httpOnly: true });
这里我们使用 res.cookie
函数创建一个新的 Cookie,第一个参数是 Cookie 的名称,第二个参数是 Cookie 的值,第三个参数是可选的配置项,例如 Cookie 的过期时间和安全设置(httpOnly
选项指定 cookie 是否仅通过 HTTP 连接而不能在客户端使用 JavaScript 访问)。
要从请求中读取 cookie,我们可以使用 req.cookies
对象:
console.log(req.cookies.name);
以上示例将输出 name
Cookie 的值。
什么是 Session?
Session 与 Cookie 类似,但它们可以存储更大的数据,例如用户的最近活动和购物车信息。它还提供了更多的安全性和控制,例如在每个请求上重新生成会话 ID,以防止会话劫持攻击。
Express.js 使用 express-session
模块来创建和管理用户会话。要使用 express-session
,需要使用 npm 安装它:
npm install express-session
现在,我们来看一个简单的示例,演示如何在 Express.js 应用程序中使用 express-session
:
const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ secret: 'my-secret-key', resave: false, saveUninitialized: true, cookie: { secure: true } })); app.get('/', (req, res) => { const { session } = req; if (session.views) { session.views++; res.send(`你的第 ${session.views} 次访问本站`); } else { session.views = 1; res.send('欢迎你第一次访问本站'); } }); app.listen(3000, () => { console.log('服务已启动'); });
在以上示例中,我们首先在应用程序中使用 express-session
中间件,以便在请求中使用 req.session
访问客户端的会话。
然后,我们在 '/' 路由处理程序中使用 req.session
对象来跟踪用户对应用程序的访问。如果客户端已经有 session.views,则将其增加 1,否则将 session.views 初始化为 1,并返回欢迎消息。
总结
通过使用 Cookie 和 Session,我们可以在 Express.js 应用程序中存储和管理会话状态信息。虽然它们都提供了在客户端存储数据的方式,但 Cookie 通常用于存储轻量级数据,而 Session 通常用于存储更多的数据,如购物车或个人资料信息。
在使用这些功能时,请注意安全性。如有必要,请将 Cookie 和 Session 的过期时间设置为较短的时间,并避免在 Cookie 中存储敏感数据。
参考资料
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65af7a7dadd4f0e0ff8eba2e