解决问题:如何保持用户登录状态?
cookie出生背景:浏览器与服务器间采用的是 http
协议,又因为http是无状态的,服务器接收请求却不知道是你发送的请求。为了让服务器识别用户从而引入了cookie。
cookie:(服务器存储在浏览器的数据而已)
什么是cookie?
cookie
是浏览器保存在用户电脑上的一小段文本,通俗的来讲就是当一个用户通过 http
访问到服务器时,服务器会将一些 Key/Value
键值对返回给客户端浏览器,并给这些数据加上一些限制条件,在条件符合时这个用户下次访问这个服务器时,数据通过请求头又被完整地给带回服务器,服务器根据这些信息来判断不同的用户。
cookie的工作流程:
服务器发起数据请求,浏览器会对服务器发起的数据请求进行cookie设置(set-cookie)。cookie里面有名和值两个重要属性,服务器会把名和值属性里的内容填充完整,浏览器会保存起来,以后服务器每发一个请求都会自动附上cookie。
session:(为了解决cookie存储用户私密数据不安全而生)
session出生背景:打开浏览器就可以看到保存了哪些cookie,用户保存浏览器的cookie,一但被黑里面的数据会不安全,所有出现了Session(会话)。
session的工作流程:
访问浏览器是浏览器会给每个用户一个唯一的sessionID和结束会话的时间,因为是服务器自己定义的东西一般会保存在数据库里。浏览器将请求访问的信息里加set-Cookie{sessionID:xxx,max-age:xx} 添加sessionID、再把会话结束时间对应设置为cookie的有效期。浏览器拿到服务器传回来的cookie进行保存。
以后浏览器每次发送请求都会自动发送cookie到相应的服务器哪里。直到cookie的有效期结束
说人话就是:去游乐园玩,(浏览器)我购买票后(首次输入的密码及用户名后),工作人员(服务器)会给我做一个通行证以及这个通行证可以用多久告诉我(浏览器),有效期内我进出都不需要再买票,只有通行证符合就放行。
token:(为了应对session的不足产生的)
出生原因:当同一时间,访问的人太多因为session是存储在服务器上的,会出现过载情况。如果存储在数据库万一数据库崩溃将导致数据无法请求。
使用服务器生成的签名密文JWT作为浏览器的通行证。