Node.js Web 框架 Express 操作 Cookie 和 Session
Cookie 和 Session 是网站常用的数据存储方式。Cookie 可以长时间存储,一般用来存储用户的登录凭证,可以让用户在进入网站后就能自动登录。Session 在关闭浏览器后会被销毁,可以用来存储用户的登录状态和一些零时数据。
Cookie 是保存到浏览器端的,浏览器在发送请求的时候也会把 Cookie 一起发送到后端,普通的 Cookie 前后端都能操作。Session 也是通过 Cookie 的方式保存到浏览器端。
Cookie
Express 操作 Cookie 需要通过 cookie-parser 中间件来实现,下面使用 npm 安装 cookie-parser:
npm install cookie-parser --save
添加 Cookie
下面在收到 HTTP 请求的时候添加一个 Cookie:
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
// 注册 cookieParser
app.use(cookieParser());
// get 请求
app.get('/', (req, res) => {
// 添加 cookie
res.cookie('name', 'Mr. Ma', {
maxAge: 7 * 86400000
});
res.send('Cookie 设置完成');
});
上面添加了一个 Cookie,Cookie 名称是 name
,Cookie 内容是 Mr. Ma
,Cookie 的有效期是 7 天,其中 7 * 86400000
就是 7 天的毫秒数。
在路由处理函数中可以使用 res.cookie
添加 Cookie,第一个参数是 Cookie 名称,第二个参数是 Cookie 值,第三个参数是选项,选项是一个对象,其中包含:
maxAge
:以毫秒为单位设置 Cookie 的有效期expires
:以 GMT 时间设置 Cookie 的有效期path
:设置 Cookie 的路径,默认是/
signed
:设置 Cookie 签名
为了避免 Cookie 内容被篡改,在设置 Cookie 的时候可以给 Cookie 设置一个签名,下面添加一个带签名的 Cookie:
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
// 注册 cookieParser 的时候传入一个签名
app.use(cookieParser('www.misterma.com'));
app.get('/', (req, res) => {
// 添加 cookie
res.cookie('user', 'Mr. Ma', {
maxAge: 7 * 86400000,
signed: true
});
res.send('Cookie 设置完成');
});
访问 Cookie
下面访问一个带签名的 Cookie:
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
// 注册 cookieParser 的时候传入一个签名
app.use(cookieParser('www.misterma.com'));
app.get('/', (req, res) => {
// 访问带签名的 Cookie
const userCookie = req.signedCookies.user;
res.send(userCookie);
});
在路由处理函数中使用 req.signedCookies.名称
就可以访问带签名的 Cookie。
下面访问一个不带签名的 Cookie:
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
// 注册 cookieParser
app.use(cookieParser());
app.get('/', (req, res) => {
const userCookie = req.cookies.userName;
res.send(userCookie);
});
不带签名的 Cookie 使用 req.cookies.名称
就可以访问到。
删除 Cookie
下面删除名为 userName
的 Cookie:
const express = require('express');
const cookieParser = require('cookie-parser');
const app = express();
// 注册 cookieParser
app.use(cookieParser());
app.get('/', (req, res) => {
res.clearCookie('userName');
res.send('Cookie 已删除');
});
删除 Cookie 也是在路由处理函数中使用 res.clearCookie
删除,参数就是 Cookie 名称。
Session
Express 操作 Session 也需要 express-session 中间件,使用 npm 安装 express-session:
npm install express-session --save
添加 Session
下面添加一个名为 userName
的 Session:
const express = require('express');
const session = require('express-session');
const app = express();
// 注册 session 中间件
app.use(session({
secret: 'www.misterma.com',
resave: false,
saveUninitialized: true
}));
app.get('/', (req, res) => {
req.session.userName = 'Mr. Ma';
res.send('Session 设置成功');
});
注册 express-session
中间件需要传入一个对象,内容包括:
secret
:用于加密的字符串resave
;每次请求都重新保存会话,无论内容是否修改saveUninitialized
:是否自动保存未初始化的会话
在路由处理函数中可以通过 req.session.名称
来设置 Session,读取 Session 也是直接使用 req.session.名称
:
app.get('/', (req, res) => {
const userSession = req.session.userName;
res.send(userSession);
});
删除 Session
下面删除 Session:
app.get('/', (req, res) => {
req.session.destroy(err => {
if (err) res.send('删除 Session 时发生错误');
res.send('成功删除 Session');
});
});
在路由处理函数中使用 req.session.destroy
可以销毁 Session,参数是一个可选的回调函数,在删除完成后触发。
版权声明:本文为原创文章,版权归 Mr. Ma's Blog 所有,转载请联系博主获得授权。
本文地址:https://www.misterma.com/archives/933/
如果对本文有什么问题或疑问都可以在评论区留言,我看到后会尽量解答。