📜  NodeJS 中的会话 Cookie(1)

📅  最后修改于: 2023-12-03 14:44:44.258000             🧑  作者: Mango

NodeJS 中的会话 Cookie

在 NodeJS 中,会话 Cookie 是一种非常有用的机制,它可以帮助我们在客户端和服务器端之间传递数据,从而实现基于会话的用户认证。

什么是会话 Cookie ?

会话 Cookie 是一种短期存储的 Cookie,它只在用户浏览器在打开某个 Web 站点时被设置,在用户关闭浏览器时自动消失。通常,它可以用来存储与客户端会话相关的信息,例如用户 ID 等。

与持久性 Cookie 不同,会话 Cookie 不会存储在用户硬盘上,而是存在于浏览器的内存中。因此,它通常比持久性 Cookie 更安全,因为它不能长期被保留,更难以被黑客攻击。

如何在 NodeJS 中使用会话 Cookie?

在 NodeJS 中使用会话 Cookie,需要使用一个叫做 express-session 的库,它提供了一种用于在客户端与服务器端之间保持会话状态的机制。

安装 express-session

在使用 express-session 前,我们需要将其安装到项目中。可以通过 npm 指令来安装它:

npm install express-session
通过 express-session 创建会话

在使用 express-session 时,我们需要先创建一个 express 应用程序对象,然后将 express-session 中间件与该应用程序对象绑定。

const express = require('express');
const session = require('express-session');
const app = express();

app.use(session({
secret: 'some_secret_key',
resave: false,
saveUninitialized: true
}));

在上面的示例中,我们使用了 app.use() 方法来将 express-session 中间件与 app 对象绑定。在这里,我们指定了一些配置选项:

  • secret:用于生成签名的字符串,它作为 Cookie 的密钥。可以是任何值。
  • resave:指定是否在每个响应上重新保存会话。默认为 true。
  • saveUninitialized:指定是否将空未初始化的会话保存到存储中。默认为 true。
读取会话数据

要访问会话数据,我们可以使用 req.session 对象。例如:

app.get('/', (req, res) => {
const user = req.session.user;
res.send(`Hello ${user}`);
});

在这个例子中,我们使用 req.session.user 访问当前用户的名字。如果 session 对象中没有用户数据,那么它将返回 undefined。

更新会话数据

要更新会话数据,我们可以使用 req.session 对象。例如:

app.post('/login', (req, res) => {
const user = req.body.username;
req.session.user = user;
res.redirect('/');
});

在这个例子中,当用户提交登录表单时,我们将其用户名存储在 req.session.user 对象中。

销毁会话

要销毁会话,我们可以简单地将 req.session 对象设置为 null:

app.get('/logout', (req, res) => {
req.session = null;
res.redirect('/');
});

在这个例子中,我们将 req.session 对象设置为 null,然后重定向到主页。

总结

通过本文的介绍,我们可以看出会话 Cookie 是一种非常有用的机制,可以让我们在客户端和服务器端之间传递数据,从而实现基于会话的用户认证。在 NodeJS 中,我们可以使用 express-session 库来实现会话 Cookie 的功能,它提供了一种简单而又可靠的机制,可以帮助我们保持会话状态信息。