HTTP协议是无状态协议,请求之间是没有联系的,Cookie, Session和Token都是用来做持久化处理的,目的就是让客户端和服务端相互认识
cookie
什么是cookie?
cookie是由服务器生成,存储在客户端的一小段文本信息。格式是字典,键值对
工作原理:
- 客户端第一次发送请求到服务器,
- 服务器接收请求后,然后发送一个http响应给客户端,其中响应头中就包含set-cookie(有服务端生成的cookie信息) 客户端把cookie保存在某个目录下的文本文件中,
- 在客户端发起的第2-N次请求,会在请求头携带cookie信息发送给服务器,服务器通过cookie来验证客户端身份信息
保存方式:cookie由服务器生成,存储在客户端,分两种类型
- 会话级:保存在内存,当浏览器关闭就会丢失
- 持久化:保存在硬盘,过了失效时间才会被清除
缺点:cookie保存在客户端,对于一些敏感信息,比如用户名,密码等,很容易被劫持,不安全
session工作原理:
session就是在一次会话中解决2次HTTP请求的关联,让他们产生联系,让两个页面都能读取找到这个全局的session信息。
- 当客户端第一次请求服务端
- 服务器收请求后,会给每个客户端分配不同的身份标识(sessionid),sessionid是经过加密的,然后通过cookie把这个sessionid保存到客户端,
- 在客户端发起的第2-N次请求,都会带上这个身份标识(sessionid),服务器通过sessionid来验证客户端身份信息。
保存方式: 服务器把用户的session信息临时保存在服务器上,用户离开网站session会被销毁; 客户端一般都把身份标识保存在cookie中
缺点:当用户量太大时,占用服务器资源,而且如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候session会丢失
优点:seesion信息存储在服务器端,相对cookie较安全
token工作原理:
- 用户首次登陆/注册成功后,服务器会签发一个token(加密)给客户端,并保存到数据库中
- 客户端收到签发的token会保存起来
- 当再次向服务器发送请求时,会带上token
- 服务器收到请求后,会去校验客户端的携带的Token与数据库中的Token,
如果一致,说明用户成功登陆过,当前用户处于登陆状态
如果没有这个token,则说明没有登陆过
如果不一致,说明原来的登陆信息已经失效,让用户重新登陆
保存方式:服务器保存在数据库中或服务器的文件
access_token: 有时间限制,限制在15分钟
refresh_token: 一般15分钟
优点:无状态,可扩展,支持移动设备,跨程序调用,安全
Cookie和Session区别:
- 存储位置不同:cookie数据存放在客户端上,session 数据存放服务器上
- 隐私策略不同:session的安全性比cookie高,所以一般情况下把重要的信息放到sesion,不重要的房在cookie
- 存储大小不同:cookie更小
Token和Session的区别
- 存储位置不同:session存在服务器内存中,token存在服务器的文件或数据库中,token比session更省服务器资源
- 作为身份认证,Token安全性比Session好,因为每一个请求都有签名,还能防止监听和攻击,而session必须靠链路层来保障通讯安全
Cookie,Session和Token相同点:
- 都是用于做鉴权的,Session是一种HTTP 存储机制,为无状态的HTTP提供持久机制,Token是令牌,判断你是否已经授权该软件;
- 都是服务器产生的