session、token与jwt
自认为对session、token与jwt理解还可以,这次来讲讲这个话题。
session与cookie
什么是session
session翻译过来是会话,但在WEB领域常常是指会话数据:“同一客户端与服务端进行沟通时的上下文信息”,session的作用,我用一个例子来做比喻:
假设我在滴滴平台上叫车被司机拒载后,拨通了滴滴客服电话进行投诉,通话开始,我是客户端,滴滴客服则是服务端,我每一次讲话就是发送一个请求,她每一次回复则是响应
以下是一种可能的沟通情形:
我:你好,我在你们平台上叫了一个车被司机拒载,我现在想投诉他。
客服MM:您好,给您带来不便非常抱歉,请问您的滴滴账号是多少?
我:185xxxx8888。
客服MM:您好,请问您要投诉哪一个行程订单?
我:今天下午3点,从南山星巴克到北山星巴克,司机车牌尾号xxx。
…
在我与滴滴客服的这次沟通中,session数据就是沟通过程中的信息上下文(滴滴账号、行程信息、司机车牌…),它的作用不言而喻,没有这些信息客服就不知道谁因为什么在投诉谁,所以session在这的作用是能帮助我完成这个投诉。
通过例子,我们能对session有一个简单理解,但对于HTTP应该如何记住session的内容却又是另外一回事,也许这个案例中客服接通我的电话时便撕出了一张便签纸,便签纸的页码是ignore-sb
,随后过程中我与她沟通的信息她便记录在这张便签纸上。
在一对一的客服例子中,客服一直知道是与“我”在对话,但针对HTTP的情况是:“一个客服(服务端)同时处理成百上千的投诉(客户端)”,客服面临的挑战是在串线的情况下,将投诉过程中每一个有效信息记录到对应的便签纸上。由于串线,客服无法确定与她沟通的是哪个投诉用户,也就不能将用户发言中的有效信息记录到对应的便签纸上,在技术上这称为HTTP协议的无状态性:“没有来电显示的多路复用通讯”。
针对HTTP通信,如果同一个客户端先后发出两个请求,在服务端,如果不借用一些特殊手段是无法得知这两个请求来自同一个客户端,这就是HTTP协议的无状态性,它导致无法追踪会话,cookie的出现就是为了解决这个问题。
什么是cookie
cookie是HTTP协议中定义的一个请求头部字段,浏览器针对这个头部字段会有一些额外处理逻辑,如自动携带、跨域检查与过期删除等,与之对应的响应头部是set-cookie,用于服务器向客户端写入cookie数据。
session与cookie的关系
我们需要克服HT