cookie、session、token 的执行原理

247 阅读2分钟

cookie

cookie 是身份证的一种手段

  1. cookie在服务器端生成的(意味着浏览器第一次访问服务器的时候是没有cookie值的)
  2. 服务器端开始生成cookie:

res.cookie('username', 'dfg', {
​
    maxAge: 1000 * 60 * 60
​
})
  1. 设置好了之后 会自动的向浏览器返回cookie值
  2. 浏览器收到服务器端的cookie值 会自动保存在cookie里面
  3. 当浏览器访问服务器的时候会默认的携带cookie值 放在请求头上发给服务器
  4. 服务器端获取浏览器的cookies值 做验证 如果验证成功,则说明用户曾经来过, 不成功说明第一次来

*缺点:*安全性很差

总结:

cookie的执行原理:当客户端访问服务器的时候(服务运用了cookie),

则服务器会生成一份cookie传输给客户端,

客户端会自动把cookie保存起来;以后客户端每次访问服务器,都会自动的携带着这份cookie。

session

1、客户端提交登陆请求,把账号密码提交到服务器验证;

2、服务器验证通过,在服务器开辟内存记录人的信息,生成cookie字符串,通过响应的形式发送给客户端;

3、客户端收到cookie,保存起来;

4、客户端再次发起请求,通过请求头把所有可用的cookie发送给服务器端;

5、服务器端收到cookie后从内存中查找对应信息,找到则证明用户验证成功,针对用户生成特定页面响应给客户端;

6、注意:敏感重要的信息是存在服务器的内存中,不会出现在cookie中;

优点:

安全

缺点:

占内存、服务器端不可以更换资源

token

  1. 基于Token身份认证的流程,在服务端不需要存储用户的登录记录,具体流程如下:

  2. 客户端使用用户名、密码发起登录请求

  3. 服务端收到请求后,验证用户名、密码(通过查询数据库)

  4. 验证成功后,服务端会生成一个Token,再把这个Token返回给客户端

  5. 客户端收到Token后会存储到Cookie或者Local Storage

  6. 客户端每次向服务端请求资源的时候需要带着服务端签发的Token

  7. 服务端收到请求后,会验证客户端请求头中的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//]}))
    ​