cookie
cookie 是身份证的一种手段
- cookie在服务器端生成的(意味着浏览器第一次访问服务器的时候是没有cookie值的)
- 服务器端开始生成cookie:
res.cookie('username', 'dfg', { maxAge: 1000 * 60 * 60 })
- 设置好了之后 会自动的向浏览器返回cookie值
- 浏览器收到服务器端的cookie值 会自动保存在cookie里面
- 当浏览器访问服务器的时候会默认的携带cookie值 放在请求头上发给服务器
- 服务器端获取浏览器的cookies值 做验证 如果验证成功,则说明用户曾经来过, 不成功说明第一次来
*缺点:*安全性很差
总结:
cookie的执行原理:当客户端访问服务器的时候(服务运用了cookie),
则服务器会生成一份cookie传输给客户端,
客户端会自动把cookie保存起来;以后客户端每次访问服务器,都会自动的携带着这份cookie。
session
1、客户端提交登陆请求,把账号密码提交到服务器验证;
2、服务器验证通过,在服务器开辟内存记录人的信息,生成cookie字符串,通过响应的形式发送给客户端;
3、客户端收到cookie,保存起来;
4、客户端再次发起请求,通过请求头把所有可用的cookie发送给服务器端;
5、服务器端收到cookie后从内存中查找对应信息,找到则证明用户验证成功,针对用户生成特定页面响应给客户端;
6、注意:敏感重要的信息是存在服务器的内存中,不会出现在cookie中;
优点:
安全
缺点:
占内存、服务器端不可以更换资源
token
基于Token身份认证的流程,在服务端不需要存储用户的登录记录,具体流程如下:
客户端使用用户名、密码发起登录请求
服务端收到请求后,验证用户名、密码(通过查询数据库)
验证成功后,服务端会生成一个Token,再把这个Token返回给客户端
客户端收到Token后会存储到Cookie或者Local Storage
客户端每次向服务端请求资源的时候需要带着服务端签发的Token
服务端收到请求后,会验证客户端请求头中的Token,验证通过后,返回数据给客户端
1.下载express-jwt 和 jsonwebtoken 2.express-jwt 将jwt字符串解析还原成json对象 3.jsonwebtoken生成jwt字符串 const jwt = require('jsonwebtoken') const expressJWT = require('express-jwt') 4.定义秘钥: const secretKey = 'itheima' 5. const tokenstr = jwt.sign({username:req.body.username},secretKey,{expiresIn:'30s'}) 6.发送给客户端: res.send({ status:200, message:'登录成功', token:tokenstr }) 7.解密以定义好的秘钥解密 app.use(expressJWT({secret:secretKey}).unless({path:[/^/api//]}))