cookie技术
应用场景
登录网站,今天输入用户名和密码后,第二天再打开很多情况下就直接登录了,这个时候用到的一个机制就是cookie。
主要内容
cookie是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器,是在客户端保持状态的方案。由服务器给出,set-cookie响应头返回,保存在浏览器中。之后请求其他接口时带上cookie请求头。
优点
1、可配置到期规则。Cookie可以在浏览器会话结束时到期,或者可以在客户端计算机上无限期存在,取决于客户端的到期规则。
2、不需要任何服务器资源。Cookie存储在客户端并在发送后由服务器读取。
3、简单性。Cookie是一种基于文本的轻量结构,包含简单的键值对。
缺点
1. 大小受到限制。浏览器对cookie的个数和大小有限制。
2、禁用。有些用户禁用了浏览器或客户端设备接收cookie的能力,因此限制了这一功能。
3、安全性。当请求被拦截后,第三方可以直接通过cookie访问目的服务器。
session技术
应用场景
session的一个场景是购物车,添加了商品之后客户端就知道添加了哪些商品,但是服务器是如何判断的呢,所以也需要存储一些信息。就用到了session。
主要内容
存在服务器的一种用来存放用户数据的类HashTable结构。浏览器第一次发送请求时,服务器自动生成了一HashTable和一Session ID来唯一标识这个HashTable,响应时通过set-cookie响应头发送到浏览器。浏览器第二次发送请求会带上cookie将前一次服务器响应中的Session ID放在请求中一并发送到服务器上,服务器从请求中提取出Session ID,并和保存的所有Session ID进行对比,找到这个用户对应的HashTable。
优点
1.多个web网站间传递一个参数,使用session可以使问题简化。
2.要使WEb站点具有用户化,可以考虑使用Session变量。
问题:Session是否必须依赖Cookie?
session的一大优点就是当客户端的cookie被禁用时会自动把session id附在url中,这样再通过session id就能记住session变量了.也叫做URL重写。
缺点
1. Session太多时会消耗服务器资源。
2.session的timeout设置过长会对服务器造成压力。
token技术
应用场景
基于服务器验证方式暴露的一些问题:
1.Seesion:每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。
2.可扩展性:在服务端的内存中使用Seesion存储登录信息,伴随而来的是可扩展性问题。(服务器集群)
3.CORS(跨域资源共享):公司内部有多个系统时,可以通过token来实现免登陆资源共享。例如:QQ登录后,QQ空间是否登录了?
4.CSRF(跨站请求伪造):用户在访问银行网站时,他们很容易受到跨站请求伪造的攻击,并且能够被利用其访问其他的网站。例如:http:www.beijing.com?userfrom=zhangsan&out=hacker&amount=1000
基于Token的身份验证的过程
1.用户通过用户名和密码发送请求。
2.服务器验证。
3.服务器返回一个签名的token 给客户端。
4.客户端储存token,并且每次用于每次发送请求。
5.服务端验证token并返回数据。