cookie+session+token详解
【cookie+session+token详解】一,基础
首先要明白cookie+session,token。是两套东西,并且session不是前端存储的session
1,什么是session+cookie?
session+cookie举例:第一次请求时候,服务器生成一个信物,并要求客户端也定一个信物。每次请求时候你都带上信物,你我信物一对比,OK了。信物有过期时间。
服务器会生成一个信物储物柜(占空间),用来存取信物(cookie),本质是空间换时间,时间即没有计算耗时。
2,什么是token?
token举例:一开始登录给你一个暗号,定一套密钥,下次你发起请求,服务器拿密钥验证你的暗号,对上了就验证通过,我不需要每次都保存你的东西。
多了个计算验证环节,是时间换空间
3,区别导致的影响
(1)影响点就是时间和空间的区别,和安全问题
(2)先说空间,服务器A爆满的时候需要负载均衡,我A这的储物柜,你B没有吧?又不可能把全部储物柜复制一套给你,我A都要爆了。就导致身份无法识别要重新登录
二,进阶
一. 为什么需要Cookie?
HTTP是一种无状态的协议,客户端与服务器建立连接并传输数据,数据传输完成后,连接就会关闭。Cookie是解决HTTP无状态性的有效手段,
服务器可以设置或读取Cookie中所包含的信息。当用户登录后,服务器会发送包含登录凭据的Cookie到用户浏览器客户端,
而浏览器对该Cookie进行某种形式的存储(内存或硬盘)。用户再次访问该网站时,浏览器会发送该Cookie到服务器,服务器对该凭据进行验证,
合法时使用户不必输入用户名和密码就可以直接登录。
Cookie的类型
Cookie总时由用户客户端进行保存的,按其存储位置可分为:内存式Cookie和硬盘式Cookie。内存式Cookie存储在内存中,浏览器关闭后就会消失,
因此也被称为非持久Cookie或会话Cookie。
硬盘式Cookie保存在硬盘中,其不会随浏览器的关闭而消失,除非用户手工清理或到了过期时间,因此也被称为持久Cookie。
二.Session和Cookie区别
1.Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
2.Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
3.Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
4.Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
三.Session与Token的区别
1.token和session都是为了身份验证,session被翻译为会话,token被翻译为令牌。
2..身份认证 token安全性比session好,因为每个请求都有签名还能防止监听以及重放攻击,而session就必须靠链路层来保障通讯安全。
3.session和token都需要去管理过期时间。
4.时间与空间的博弈:session是空间换时间,而token是时间换空间。
四.Cookie原理
Cookie定义了一些HTTP请求头和HTTP响应头,通过这些HTTP头信息使服务器可以与客户进行状态交互。客户端请求服务器后,如果服务器需要记录用户状态,
服务器会在响应信息中包含一个Set-Cookie的响应头,客户端会根据这个响应头存储Cookie信息。再次请求服务器时,客户端会在请求信息中包含一个Cookie请求头,
而服务器会根据这个请求头进行用户身份、状态等较验。
五.Session原理
当你一次访问服务器的时候,服务器会在内存中开辟一块空间,返回唯一一把打开该空间的钥匙,再把这把钥匙返回到浏览器。
当你第二次访问的时候浏览器会携带这把钥匙到服务器端打开对应的空间,如果该空间已经销毁又重新返回开辟一块新的空间返回新的钥匙到浏览器。
六.Token原理
浏览器第一次访问服务器,根据传过来的唯一标识userId,服务端会通过一些算法,如常用的HMAC-SHA256算法,然后加一个密钥,生成一个token,
然后通过BASE64编码一下之后将这个token发送给客户端;客户端将token保存起来,下次请求时,带着token,服务器收到请求后,
然后会用相同的算法和密钥去验证token,如果通过,执行业务操作,不通过,返回不通过信息。
推荐阅读
- mysql+mybatis下全文搜索的使用方法
- JavaScript中的Map数据结构详解
- 数据结构c语言版第一章知识点总结|数据结构c语言版第一章知识点总结,【数据结构(C语言版)】第一章绪论(课本笔记)...
- 数据结构|顺序表的基本操作及C语言实现(详解版)
- Logstash grok 匹配拆分日志
- 基于C语言实现简单五子棋游戏
- 【webpack】publicPath
- json知识点总结(二)--JSONObject详解
- leecode题解|「代码随想录」968.监控二叉树【贪心算法】力扣详解!
- C语言与C++编程|二叉树操作详解