session 跟 token 比较,各自的优缺点, cookie进行存储

3 篇文章 0 订阅

借用B站up主技术蛋老师代码,参考视频标题:
Cookie、Session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?在这里插入图片描述在这里插入图片描述

在这里插入图片描述

session 服务端操作。sessionId存在服务器

Set-Cookie

响应头是服务器返回的响应头用来在浏览器种cookie,一旦被种下,当浏览器访问符合条件的url地址时,会自动带上这个cookie

Expires

用来设置cookie的过期时间,时间需要符合HTTP-date规范

cookie存在浏览器

客户端点击登陆,调用 /login 接口服务端读取过程,第一次访问接口没有携带cookie,因为服务器接收到请求,服务端生成一个set-cookie,
set-cookie : { sessionId: ‘fsdlafjlsadfsdajf’, Max-age: 6666 }

在响应头获取到并保存在浏览器,其中 sessions 中的 name ,value 为 sessionId,
浏览器中将cookie中存储  Ther GG: fsdlafjlsadfsdajf

后续刷新登陆,浏览器会自动在请求头重添加 cookie 并发送,操作退出,清除session,随着时间流逝cookie也会消失,重新登陆成功后浏览器就会再次设置了cookie

缺点:某个时间大量用户,可能就要存储session-id在服务器

用户首次等会响应头中携带 set-cookie

在这里插入图片描述

登陆成功后重新进入登陆页面,请求头中自己带了cookes

在这里插入图片描述

所有就有了token的衍生

token JSON WEB Token

客户端存token 服务器不需要存密文,只管签发跟验证

服务器只保存一份密钥,每次请求服务器都需要解密操作,

在这里插入图片描述

客户端使用用户名跟密码请求登录
服务端收到请求,去验证用户名与密码 (加密)
验证成功后,服务端会签发一个 token 并把这个 token 发送给客户端
客户端收到 token 以后,会把它存储起来,比如放在 cookie 里或者 localStorage 里
客户端每次向服务端请求资源的时候需要带着服务端签发的 token
服务端收到请求,然后去验证客户端请求里面带着的 token ,如果验证成功,就向客户端返回请求的数据
每一次请求都需要携带 token,需要把 token 放到 HTTP 的 Header 里

基于 token 的用户认证是一种服务端无状态的认证方式,服务端不用存放 token 数据。用解析 token 的计算时间换取 session 的存储空间,从而减轻服务器的压力,减少频繁的查询数据库

在index.js 页面,调用 /IPSPEC/cache/user 接口,执行接口获取是否有token,
有token --》
返回token,使用Cookies.set(‘zingtoken’, token) 存储,设置有效期 24小时,超出清除token , 因为减少服务器存储 token
没有token,接口编码 code:299 认证失败,
跳转登录页面 登陆请求 login 接口 将用户名密码通过 base64转码(因为服务端拿到是一个明文,很危险),传给后端, 返回 token,做一个持久化登陆,将PSMU.setToken(res.data.token) 使用localstroage存储,为什么没用cookie,因为服务端可以操作cookie,与其让服务端操作,不如让前端做,服务端尽量从业务上面分隔开,这也是前后端分离的逻辑,然后用户再次请求其他的接口会从本地获取token,正常进入页面

Token 和 Session 的区别

  1. Session 是一种记录服务器和客户端会话状态的机制,使服务端有状态化,可以记录会话信息。而 Token是令牌,访问资源接口(API)时所需要的资源凭证。Token 使服务端无状态化,不会存储会话信息。
  2. Session 和 Token 并不矛盾,
  3. 作为身份认证 Token 安全性比 Session好,因为每一个请求都有签名还能防止监听以及重放攻击,
  4. 而 Session 就必须依赖链路层来保障通讯安全了。如果你需要实现有状态的会话,仍然可以增加 Session 来在服务器端保存一些状态。
  5. 所谓 Session 认证只是简单的把 User 信息存储到 Session 里,因为 SessionID
    的不可预测性,暂且认为是安全的。而 Token ,如果指的是 OAuth Token 或类似的机制的话,提供的是 认证 和 授权 ,认证是针对用户,授权是针对 App 。其目的是让某 App 有权利访问某用户的信息。这里的 Token 是唯一的。不可以转移到其它App上,也不可以转到其它用户上。Session 只提供一种简单的认证,即只要有此 SessionID ,即认为有此 User的全部权利。是需要严格保密的,这个数据应该只保存在站方,不应该共享给其它网站或者第三方App。所以简单来说:如果你的用户数据可能需要和第三方共享,或者允许第三方调用 API 接口,用 Token 如果永远只是自己的网站,自己的 App,用什么就无所谓了。
有一些疑问?

Cookie中的问题, 在单页面开发中,存cookie,多个页面共享, 那么a页面存,打开新页面,还会存在cookie嘛

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值