如何在 Express.js 中使用 Cookie 和 Session

在 Web 开发中,常常需要保存一些用户信息以便完成用户身份认证、会话等功能。Cookie 和 Session 是最常用的两种方式,本文将针对 Express.js 框架介绍如何使用 Cookie 和 Session。

什么是 Cookie 和 Session

  • Cookie:是客户端保存数据的一种方式,浏览器向服务器发送请求时,会把 Cookie 值传递给服务器。
  • Session:是服务器保存数据的一种方式,服务器上保存一个 Session 对象,它保存着客户端请求的一些信息。

设置 Cookie

在 Express.js 中使用 Cookie,需要安装 cookie-parser 中间件。在开发中使用下面的命令进行安装:

npm install cookie-parser --save

在代码中引入中间件:

const cookieParser = require('cookie-parser');
app.use(cookieParser());

通过 response 对象,可以设置 Cookie:

res.cookie(name, value [, options])
  • name:Cookie 名称
  • value:Cookie 值
  • options:配置选项,例如 Cookie 的有效期、域名等等。

设置 Cookie:

res.cookie('name', 'value');

设置包含选项的 Cookie:

res.cookie('name', 'value', { maxAge: 900000, httpOnly: true });

读取 Cookie

通过 request 对象可以读取 Cookie:

req.cookies

读取 Cookie:

app.get('/', (req, res) => {
   console.log(req.cookies);
});

设置 Session

在 Express.js 中使用 Session,需要安装 express-session 中间件。在开发中使用下面的命令进行安装:

npm install express-session --save

在代码中引入中间件:

const session = require('express-session');
app.use(session({
    secret: 'keyboard cat', // session 加密的密钥
    resave: false, // 是否重新保存会话
    saveUninitialized: true, // 是否保存未初始化的会话
    cookie: { secure: true } // 是否仅通过 HTTPS 分配 cookie
}));

读写 Session

Session 是存储在服务器端的数据,因此可以安全地存储用户的敏感信息。通过 req.session 对象可以访问用户的 Session 数据。

设置 Session:

app.get('/', (req, res) => {
    req.session.name = 'value';
});

读取 Session:

app.get('/', (req, res) => {
    console.log(req.session.name);
});

示例代码

设定 Cookie:

const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

app.get('/', (req, res) => {
    res.cookie('name', 'value', { maxAge: 900000, httpOnly: true });
    res.send('Cookie set successfully!');
});

app.listen(3000, () => console.log('Server is running on http://localhost:3000'));

读取 Cookie:

const express = require('express');
const cookieParser = require('cookie-parser');

const app = express();
app.use(cookieParser());

app.get('/', (req, res) => {
    console.log(req.cookies);
    res.send('Cookie sent to console');
});

app.listen(3000, () => console.log('Server is running on http://localhost:3000'));

设置 Session:

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

const app = express();
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: true }
}));

app.get('/', (req, res) => {
    req.session.name = 'value';
    res.send('Session set successfully!');
});

app.listen(3000, () => console.log('Server is running on http://localhost:3000'));

读取 Session:

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

const app = express();
app.use(session({
    secret: 'keyboard cat',
    resave: false,
    saveUninitialized: true,
    cookie: { secure: true }
}));

app.get('/', (req, res) => {
    console.log(req.session.name);
    res.send('Session sent to console!');
});

app.listen(3000, () => console.log('Server is running on http://localhost:3000'));

总结

文章介绍了如何在 Express.js 中使用 Cookie 和 Session。Cookie 适用于客户端存储数据,Session 适用于服务器端存储数据。通过代码示例展示了如何设置、读取 Cookie 和 Session。

掌握了这些基础知识后,你将可以基于 Cookie 和 Session 开发更加灵活、功能更加强大的 Web 应用程序。

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b9da87add4f0e0ff264d30