这些年我们用过的状态跟踪的方式(隐藏表单,cookie,session,token)

很久以前,Web 基本上就是文档的浏览而已,既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议,就是请求加响应模型,是不用记住是谁刚刚发了HTTP请求,每个请求对客户端来说都是全新的.

但是随着交互式Web应用的兴起,像购物网站,就面临一个问题,那就是必须记住哪些人登录系统, 哪些人往自己的购物车中放商品, 也就是说必须把每个人区分开,因为HTTP请求是无状态的,所以后面就有了状态跟踪.

状态跟踪的发展:
1.隐藏表单:
在所有页面中,利用js 将用户ID设置在隐藏表单中,每次请求服务器的时候,将用户id上传,如果有一个表单没有上传,那么服务器就找不到该用户了
2.cookie:
是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能.
cookie由服务器生成,发送给浏览器,浏览器把cookie以键值对形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器.由于cookie是存在客户端上的,所以浏览器加入了一些限制确保cookie不会被恶意使用,同时不会占据太多磁盘空间(每个cookie大小不会超过4kb),所以每个域的cookie数量是有限的
3.session:
session 从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交谈的是谁呢?对方肯定有某种特征表明它的身份
session 也是类似的道理,服务器要知道当前发请求给自己的是谁.为了做这种区分,服务器就要给每个客户端分配不同的"身份标识"(sessionID),然后客户端每次向服务器发请求的时候,都带上这个"身份标识",服务器就知道这个请求来自于谁了.至于客户端怎么保存这个"身份标识",可以有很多种方式,对于浏览器客户端,大家都默认采用 cookie 的方式
服务器使用session把用户的信息临时保存在了服务器上,用户离开网站后session会被销毁.这种用户信息存储方式相对cookie来说更安全,可是session有一个缺陷: 如果服务器(集群)做了负载均衡,那么下一个操作请求被分配到了另一台服务器的时候session会丢失
4.token:
现在Web领域基于Token的身份验证随处可见,在大多数使用Web API的互联网公司中,tokens 是多用户下处理认证的最佳方式.
例如:Facebook,Twitter, Google+, GitHub等

为什么要使用token呢?
用session来说,随着Web,应用程序,以及移动端的兴起,这种验证的方式逐渐暴露出了问题.尤其是在可扩展性方面
1.seesion:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息.当越来越多的用户发请求时,内存的开销也会不断增加,服务器的压力越来越大,一直到服务器的极限.
2.可扩展性:在服务端的内存中使用seesion存储登录信息,伴随而来的是可扩展性问题.
3.CORS(跨域资源共享):当我们需要让数据跨多台移动设备上使用时,跨域资源的共享会是一个让人头疼的问题.在使用Ajax抓取另一个域的资源,就可以会出现禁止请求的情况.
4.CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站.

为了解决这些问题,token出现了
token类似于cookie,但是token是由服务器加了密的,是要进行身份验证的,存的信息还比cookie多
Token的验证的过程如下:
1.用户登录校验,校验成功后就返回Token给客户端
2.客户端收到数据后保存在客户端
3.客户端每次请求携带Token到服务器端
4.服务器端采用filter过滤器校验token,校验成功则返回请求数据,校验失败则返回错误码

token的优势:
1.无状态、可扩展
在客户端存储的Token是无状态的,并且能够被扩展.基于这种无状态和不存储session信息,负载均衡器能够将用户信息从一个服务传到其他服务器上
2.安全
请求中发送token而不再是发送cookie能够防止CSRF(跨站请求伪造)。即使在客户端使用cookie存储token,cookie也仅仅是一个存储机制而不是用于认证
3.可扩展性
token能够创建与其它程序共享权限的程序
4.多平台跨域
CORS(跨域资源共享),对应用程序和服务进行扩展的时候,需要介入各种各样的设备和应用程序,只要用户有一个通过了验证的token,数据和资源就能够在任何域上被请求到,当然,要遵循JWT(JSON Web Token)标准哦~什么是JWT,点击这里,去看看吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值