cookie、session、Token究竟区别在哪?如何进行身份认证,保持用户登录状态?

HTTP是无状态的,也就是说你这次访问了服务器,关闭网页,再次访问服务器,服务器是没有意识到又是你来访问,那怎么保持登录状态呢?
设置让用户可以选择记住用户名和密码,但是把密码交给浏览器,如果电脑被黑了,浏览器里记录的信息就会很危险, 即使我们自己不需要亲自输入用户名密码,浏览器还得想办法帮我们在每一次请求里加入用户名密码,这项技术就是cookie
cookie的基本流程:浏览器发起HTTP请求,服务器会进行cookie设置,也就是set-cookie,cookie发给浏览器之后,浏览器会保存起来,这样浏览器以后发送的每一个请求都会自动附上这个cookie,我们打开浏览器是可以看到保存了哪些cookie,也就是说如果把用户名和密码放在cookie是很不安全的,只要电脑被黑,在cookie里的重要信息就会被泄漏,于是就有了新的技术session
如果有多台服务器,一台服务器存储了sessionid,又面临需要分享session id给其他服务器
jwt json web token
http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html(阮一峰)
header.payload.signature
算法 特定数据(有效期) 签名
使用方式
方式一
放在HTTP请求头信息的Authorization字段,使用Bearer模式添加JWT
方式二
放在post请求的数据体里
方式三
通过url传输
生成的token客户端以cookie或者storage的方式进行存储,cookie需要解决跨域问题
token和jwt的区别
token:服务端验证客户端发送过来的token时,还需要查询数据库获取用户信息,然后验证token是否有效
jwt:将token和payload加密后存储于客户端,服务端只需要使用密钥解密进行校验即可,不需要查询或者减少查询数据库,因为jwt自包含了用户信息和加密的数据。
如何保证token在客户端的安全性?
header和payload的信息会被base64编码,虽然jwt不保存在服务器这里,但是服务器需要保存一段密码,这段编码需要结合着两段编码进行算法运算,最终得到签名信息。这里使用的算法就是刚刚header声明的算法,签名的信息也就是signature部分了,这样一个完整的jwt就可以发给客户端了
如何解决跨域问题?
nginx代理跨域
nginx反向代理,通过配置一下参数
在go中,跨域中间件也是通过配置请求头参数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值