(1)cookie-parser模块
发送cookie:
名,值,设置
app.get('/test', function(req, res) {
res.cookie('name', 'heqi', { maxAge: 900000 });
});
修改cookie:覆盖即可
获取cookie
req的cookies属性:req.cookie
使用signed属性加密cookie
1.配置中间件的时候需要传参app.use(cookieParser('123456'));
2.设置 cookie 的时候配置 signed 属性
res.cookie('username', 'haha', { maxAge:900000, signed:true });
3.这样就需要用req.signedCookies 访问它而不是 req.cookies
(2)express-session模块
一、 Session 简单介绍
session 是另一种记录客户状态的机制, 不同的是 Cookie 保存在客户端浏览器中, 而 session 保存在服务器上。
二、 Session 的工作流程
当浏览器访问服务器并发送第一次请求时,服务器端会创建一个 session 对象,生成一个类似于key,value 的键值对,然后将 key(cookie)返回到浏览器(客户)端,浏览器下次再访问时,携带 key(cookie),找到对应的 session(value)。 客户的信息都保存在服务端的session 中。(具体翻看图解HTTP)
三、 express-session 的使用:
1.安装 express-session
npm install express-session --save
2.引入 express-session
var session = require("express-session");
3.设置
app.use(session({
secret: 'hhhhh',
resave: true,
saveUninitialized: true
}))
4.使用
设置值 req.session.username = "张三";
获取值 req.session.username
5.设置参数:
secret:一个 String 类型的字符串,作为服务器端生成 session 的签名。
name:返回客户端的 key 的名称, 默认为 connect.sid,也可以自己设置。
resave:强制保存 session 即使它并没有变化,。 默认为 true。 建议设置成 false。
saveUninitialized:强制将未初始化的 session 存储。 当新建了一个 session 且未设定属性或值时, 它就处于未初始化状态。 在设定一个 cookie 前, 这对于登陆验证, 减轻服务端存储压力, 权限控制是有帮助的。(默认: true) 。 建议手动添加。
cookie:与cookie的设置一样,设置发送到客户端 的key 的属性, 默认值为{ path: ‘/’ , httpOnly: true, secure: false, maxAge: null }。
rolling:在每次请求时强行重新设置 cookie, 这将重置 cookie 过期时间(默认: false)
6.express-session 的常用方法:
req.session.username = 'ssss';
req.session.username
req.session.cookie.maxAge = 0;
req.session.destroy(function(err) {
})
四、将session保存到服务端:
1.需要安装 express-session
2.引入模块
var express = require('express');
var logger = require('morgan');
//引入session中间件
let expressSession=require("express-session")
3.配置中间件
//使用session中间件
app.use(expressSession({
resave:true,//每次是否都刷新存储器
saveUninitialized:true,
secret:"xiaoxuesheng" //秘钥
}))
总结
cookie和session的区别:
-
cookie是保存在客户端的
-
session是保存在服务器端
-
session更加安全