一直在扭螺丝,彻底没有碰过登陆这块,只能先从文章学习学习前端
咱们都知道,http协议是无状态协议,服务器不知道究竟是哪一个靓仔在请求它的接口,那这个特性会致使什么问题呢?
最多见的就是,好比我登陆了一个页面以后,紧接着请求一个接口,这个时候若是我不携带一些参数过去,那根据这个特性,接口是不知道我是那个已经登陆好的用户。算法
基于上面那个问题,后面就出现了两套解决方案,后端
在用户首先登陆输入完帐号密码以后,后端校验以后,在接口返回的时候后端会写一段代码在响应的时候后把一个sessionId存入cookie中,(注意这里是后端操做的,这个步骤不用前端参与),接下来后面的接口请求的时候都会自动带上cookie给后端(cookie的特性之一),后端就知道这个请求时哪一个登陆了的用户浏览器
缺点:
1.后端要存这个session的信息,有资源消耗;
2.要处理session在不一样服务器共享的问题;缓存
一旦登陆的用户多起来,这个session的消耗是巨大的,为了解决这个问题,后面就改为后端不保存这个session,那不保存了,要怎么校验这个身份呢?
那些靓仔想到一种叫token(令牌)的校验,原理是这样。
一样是用户登陆输入完帐号密码以后,一样是要返回一个id给客户端而且存起来,可是这个时候,后端再用一个算法加一个密钥对这个id作一个签名,并把这个签名跟数据一块儿保存在cookie,
接下来接口请求的时候同样带上cookie,此时后端校验的时候,他拿到数据后再用一样的算法和密钥再作一个签名,而后对比这个签名是否是跟你传过来的签名是同样的服务器
cookie是用来存储文本信息的文件,在硬盘空间能够找到(设置了过时时间的话),在浏览器能够看到,按F12,浏览器缓存那里就能够看到。cookie
主要用来保存会话状态,它的特性之一会跟随接口的调用自动带上(设置的时候配置),因此一旦cookie多了,也会有性能的问题。
固然也有人用它来作数据缓存,可是通常不推荐,由于这玩意有大小限制,单个不能超过4k,临时存数据仍是考虑localStorage这种session
(1)大小
单个限制4k,什么叫单个,看图
一条就是单个,并且总的大小也是有一个限制,不一样浏览器好像不一样,好比Firefox每一个域名cookie限制为50个。性能
(2)操做(这里指前端)学习
document.cookie="userId=828999";
document.cookie="userId=828;username=lll";
document.cookie="userId=999";
//获取当前时间 var date=new Date(); //将date设置为过去的时间,减了1毫秒就确定是过去的时间 date.setTime(date.getTime() - 1); document.cookie="userId=999;expires="+date.toGMTString();
document.cookie