什么是 cookie?
cookie 是一种存储在用户浏览器中的小文本文件,用于完成网页与浏览器之间的数据交换。一次 HTTP 请求只能传递少量的数据,而 cookie 可以在浏览器与服务器之间存储更多数据,可以使登录状态等信息得以保留。
什么是 cookie-parser?
cookie-parser 是一个 Node.js 的第三方中间件,用于解析浏览器发送的 cookie,并将解析出的 cookie 存储在 req.cookies 对象中,供后续程序使用。
cookie-parser 的安装非常简单:
npm install cookie-parser
cookie-parser 的使用方法
首先在 Node.js 中导入 cookie-parser 模块:
const cookieParser = require('cookie-parser');
在使用 cookie-parser 之前,需要通过 express 的 use 方法将其作为中间件注册到服务器中:
const express = require('express'); const app = express(); app.use(cookieParser());
在这之后,当浏览器在请求中传递了 cookie 时,cookie-parser 会自动解析 cookie,并将其以键值对的形式存储在 req.cookies 对象中。
可以在路由方法中通过 req.cookies 访问解析出的 cookie:
app.get('/', (req, res) => { if (req.cookies.username) { console.log(req.cookies.username); } else { res.send('未设置 cookie'); } });
以上代码在访问根目录时,判断是否有名为 username 的 cookie。如果有,则将其输出到控制台,否则,向浏览器发送“未设置 cookie”的消息。
什么是 cookie-session?
cookie-session 是一个基于 cookie 的会话中间件,提供了可持久化的会话状态。与 cookie-parser 不同,cookie-session 并不是将数据存储在客户端的 cookie 中,而是将数据加密后存储在服务端的 cookie 中。
cookie-session 也可以通过 NPM 安装:
npm install cookie-session
cookie-session 的使用方法
使用 cookie-session 需要先配置一个密钥(secret),用于加密 cookie 数据。在 Express 中,可以通过 app.use 方法将 cookie-session 注册为中间件:
const cookieSession = require('cookie-session'); app.use(cookieSession({ name: 'session', keys: ['secret-key'], maxAge: 24 * 60 * 60 * 1000 // 设置 cookie 的有效时间为 24 小时 }));
在上面的代码中,name 参数用于设置 cookie 的名称,keys 参数是用于进行数据加密的秘钥,maxAge 参数用于设置 cookie 的有效时间。
在路由中,可以通过访问 req.session 对象来读取和设置会话状态:
app.get('/', (req, res) => { if (req.session.username) { console.log(req.session.username); } else { req.session.username = 'test-user'; } });
在以上代码中,如果 req.session.username 已经存在,则输出其值。否则,将 username 的值设置为“test-user”。
总结
cookie-parser 和 cookie-session 中间件是 Node.js 处理 cookie 的两个重要工具,它们能够帮助你实现基于 cookie 的用户认证、数据传输等功能。这里只是介绍了 cookie-parser 和 cookie-session 的基础使用方法,更多详细的配置信息和 API 可以查阅官方文档进行了解。
示例代码
-- -------------------- ---- ------- ----- ------- - ------------------- ----- ------------ - ------------------------- ----- ------------- - -------------------------- ----- --- - ---------- ------------------------ ----------------------- ----- ---------- ----- --------------- ------- -- - -- - -- - ---- ---- ------------ ----- ---- -- - -- ---------------------- - ---------------------------------- - ---- - ------------- --------- - -- ---------------------- - ---------------------------------- - ---- - -------------------- - ------------ - --- ---------------- -- -- - ------------------- --------- -- ---- ------- ---
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/646c8c20968c7c53b0b823bf