前言
在客户端与服务器进行交互时,常常需要对用户状态和身份进行识别和维护。而 cookie 和 session 便是常用的两种解决方案。在 Express.js 中,cookie 和 session 的使用也非常方便。本文将对这两种技术进行详细的讲解,包括原理、使用方法和示例代码,以便初学者能够快速上手。
cookie
cookie 是一种保存在客户端的小型文本文件,通常用于记录用户的身份、偏好和浏览历史等信息。在客户端发送请求时,这些信息会被一同发送到服务器端,以便服务器端能够做出相应的响应。在 Express.js 中,可以使用 cookie-parser 中间件对 cookie 进行解析和设置。
安装和使用
使用 npm 可以轻松地安装 cookie-parser 中间件。
npm install cookie-parser --save
在使用的时候,需要先引入该中间件然后使用 app.use()
将其注册进应用程序中。基本使用如下所示:
const express = require('express'); const cookieParser = require('cookie-parser'); const app = express(); app.use(cookieParser());
设置 cookie
设置 cookie 可以使用 res.cookie()
方法,方法接收三个参数,分别是 cookie 的名称、值和一些属性选项,如过期时间、域名、路径、安全等级等。示例如下:
app.get('/', (req, res) => { // 设置名为 name 的 cookie,值为 alice,过期时间为一小时 res.cookie('name', 'alice', { maxAge: 3600000 }); res.send('cookie has been set'); });
获取 cookie
获取 cookie 可以使用 req.cookies
对象,该对象保存了所有客户端发送的 cookie。示例如下:
app.get('/', (req, res) => { // 获取名为 name 的 cookie 的值 const name = req.cookies.name; res.send(`Hello, ${name}`); });
删除 cookie
删除 cookie 可以使用 res.clearCookie()
方法,该方法接收 cookie 的名称作为参数即可。示例如下:
app.get('/logout', (req, res) => { res.clearCookie('name'); res.send('you have been logged out'); });
session
与 cookie 不同,session 是一种在服务器端保存状态的解决方案。在 Express.js 中,可以使用 express-session 中间件对 session 进行解析和设置。
安装和使用
使用 npm 可以轻松地安装 express-session 中间件。
npm install express-session --save
在使用的时候,需要先引入该中间件然后使用 app.use()
将其注册进应用程序中。基本使用如下所示:
const express = require('express'); const session = require('express-session'); const app = express(); app.use(session({ secret: 'my secret', resave: false, saveUninitialized: false, }));
中间件接收一个对象,其中 secret
属性表示加密密钥,resave
属性表示是否在每个请求结束时都重新保存 session,saveUninitialized
属性表示是否在未初始化 session 时自动保存。这些参数的含义可以根据具体的情况进行配置。
设置 session
设置 session 可以直接将属性赋值给 req.session
对象即可。示例如下:
app.get('/', (req, res) => { // 设置名为 username 的 session,值为 alice req.session.username = 'alice'; res.send('session has been set'); });
获取 session
获取 session 可以直接从 req.session
对象中获取。示例如下:
app.get('/', (req, res) => { // 获取名为 username 的 session 的值 const username = req.session.username; res.send(`Hello, ${username}`); });
删除 session
删除 session 可以使用 req.session.destroy()
方法,该方法会立即将 session 销毁,示例如下:
app.get('/logout', (req, res) => { req.session.destroy(); res.send('you have been logged out'); });
示例代码
下面是一个完整的示例代码,包括设置 cookie 和 session 的过程。其中,当用户访问 /login
时会设置 cookie 和 session,当用户访问 /
时会从 cookie 和 session 中获取数据。当用户访问 /logout
时会删除 cookie 和 session。示例代码如下:
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------------ - ------------------------- ----- ------- - --------------------------- ----- --- - ---------- -- -- ------------- ----- ------ ------------------------ -- -- --------------- ----- ------- --- ----------------- ------- --- -------- ------- ------ ------------------ ------ ---- -- -- ------ - ------- ----------------- ----- ---- -- - -- ---- ---- - --------- -------------- ------------------ -------- - ------- ------- --- -- ---- -------- - ---------- ----- -------------------- - -------- ---------------- --- ------- ---- ---- ------ --- -- -- ------ - ------- ------------ ----- ---- -- - -- ---- ---- - ------ -- ----- ---- - ----------------- -- ---- -------- - ------- -- ----- -------- - --------------------- ---------------- ------- ---------------- --- -- -- ------ - ------- ------------------ ----- ---- -- - -- ---- ---- - ------ ------------------------ -- -- ------- ---------------------- ------------- ---- ---- ------ ------ --- -- ----- ---------------- -- -- - ------------------- -- --------- -- ---- ------- ---
总结
在 Express.js 中,cookie 和 session 是维护用户状态和身份的两种强大的解决方案。通过 cookie-parser 和 express-session 中间件,我们可以轻松地对 cookie 和 session 进行解析和设置。本文详细讲解了 cookie 和 session 的使用方法和示例代码,希望对初学者们有所帮助。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/648ac1d148841e98948e5787