1.cookie-parser 和express-session
cookie-parser 就是当客户端访问服务器的时候(服务运用了cookie),则服务器会生成一份cookie传输给客户端,客户端会自动把cookie保存起来;以后客户端每次访问服务器,都会自动的携带着这份cookie。
而session也是cookie的一种,但是他们的执行机制并不怎么相同
express-session 是当客户端第一次请求服务器的时候,服务器生成一份session保存在服务端,将该数据(session)的id以cookie的形式传递给客户端,以后的每次请求,浏览器都会自动的携带cookie来访问服务器(session数据id)
2. express-session 和cookie-parser 的区别(重要)
session和cookie的作用有点相同,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器, 容易被窃取和修改,, 而session存储在服务器。存储在服务器的数据会更加的安全,不容易被窃取。但存储在服务器也有一定的弊端,会占用服务器的资源,增加服务器的负担。
3 .cookie-parser 和session都属于是第三软件,都是需要安装引用的
3.1 cookie-parser :
npm i cookie-parser
//引用
let expressSession=require("express-session")
在cookie-parser 中设置cookie
//设置cookie
res.cookies('key','value',option);
以下是在网上找的:
option 的具体配置如下,可供参考:
domain: 域名。设置子域名(二级域名)是否可以访问cookie。
name=value:键值对,可以设置要保存的 Key/Value,注意这里的 name 不能和其他属性项的名字一样
expires: 过期时间(秒),在设置的某个时间点后该 cookie 就会失效,如 expires=Wednesday,09-Nov-99 23:12:40 GMT
maxAge: 最大失效时间(毫秒),设置在多少后失效
secure: 当 secure 值为 true 时, cookie 在 HTTP 中是无效,在 HTTPS 中才有效
path: 表示 cookie 影响到的路由,如 path=/。如果路径不能匹配时,浏览器则不发送这个 cookie
signed: 表示是否签名(加密) cookie, 设为 true 会对这个 cookie 签名,这样就需要用res.signedcookies 访问它,前提需要设置上面中间件app.use传参 。未签名则用 res.cookies 访问。
4 express-session
npm i express-session
//引入第三方中间件
let favicon=require('serve-favicon');
//使用session中间件
app.use(expressSession({
resave:true,//每次是否都刷新存储器
saveUninitialized:true,
secret:"xiaoxuesheng" //秘钥
}))
4.1 工作原理
1. 用户提交包含用户名和密码的表单,发送HTTP请求。
2. 服务器验证用户发来的用户名密码。
3. 如果正确则把当前用户名(通常是用户对象)存储到redis中,并生成它在redis中的ID。
这个ID称为Session ID,通过Session ID可以从Redis中取出对应的用户对象, 敏感数据(比如authed=true)都存储在这个用户对象中。
4. 设置cookie为sessionId=xxxxxx|checksum并发送HTTP响应, 仍然为每一项cookie都设置签名。
5. 用户收到HTTP响应后,便看不到任何敏感数据了。在此后的请求中发送该cookie给服务器。
6. 服务器收到此后的HTTP请求后,发现cookie中有SessionID,进行放篡改验证。
7. 如果通过了验证,根据该ID从Redis中取出对应的用户对象, 查看该对象的状态并继续执行业务逻辑。
4.2 req.session - 访问会话
正确设置中间件后,可以通过属性来存储或访问Session数据,Session会被序列化为JSON存储。
req.sessionID - 已载入Session的ID
通过属性,可以获取已加载的Session的ID。在Session创建/载入后,该属必是个只读值。req.sessionID



