一、前言
一直在扭螺丝,完全没有碰过登录这块,只能先从文章学习学习
二、几个点过一遍
1. http协议是无状态协议
我们都知道,http协议是无状态协议,服务器不知道到底是哪个靓仔在请求它的接口,那这个特性会导致什么问题呢?
最常见的就是,比如我登录了一个页面之后,紧接着请求一个接口,这个时候如果我不携带一些参数过去,那根据这个特性,接口是不知道我是那个已经登录好的用户。
2. cookie,session,token
基于上面那个问题,后面就出现了两套解决方案,
(1)一套是cookie + session
在用户首先登录输入完账号密码之后,后端校验之后,在接口返回的时候后端会写一段代码在响应的时候后把一个sessionId存入cookie中,(注意这里是后端操作的,这个步骤不用前端参与),接下来后面的接口请求的时候都会自动带上cookie给后端(cookie的特性之一),后端就知道这个请求时哪个登录了的用户
缺点:
1.后端要存这个session的信息,有资源消耗;
2.要处理session在不同服务器共享的问题;
(2)一套是cookie+token
一旦登录的用户多起来,这个session的消耗是巨大的,为了解决这个问题,后面就改成后端不保存这个session,那不保存了,要怎么校验这个身份呢?
那些靓仔想到一种叫token(令牌)的校验,原理是这样。
同样是用户登录输入完账号密码之后,同样是要返回一个id给客户端并且存起来,但是这个时候,后端再用一个算法加一个密钥对这个id做一个签名,并把这个签名跟数据一起保存在cookie,
接下来接口请求的时候一样带上cookie,此时后端校验的时候,他拿到数据后再用同样的算法和密钥再做一个签名,然后对比这个签名是不是跟你传过来的签名是一样的
3. cookie的基本介绍
1. 什么是cookie
cookie是用来存储文本信息的文件,在硬盘空间可以找到(设置了过期时间的话),在浏览器可以看到,按F12,浏览器缓存那里就可以看到。
2. cookie作用
主要用来保存会话状态,它的特性之一会跟随接口的调用自动带上(设置的时候配置),所以一旦cookie多了,也会有性能的问题。
当然也有人用它来做数据缓存,但是一般不推荐,因为这玩意有大小限制,单个不能超过4k,临时存数据还是考虑localStorage这种
3. cookie相关知识
(1)大小
单个限制4k,什么叫单个,看图
一条就是单个,而且总的大小也是有一个限制,不同浏览器好像不同,比如Firefox每个域名cookie限制为50个。
(2)操作(这里指前端)
- 创建一个cookie
document.cookie="userId=828999";
- 创建一个cookie,多个键值对的话,用分号分割
document.cookie="userId=828;username=lll";
- 重写,保证name一样
document.cookie="userId=999";
- 删除,设置expires属性,属性值为过去的时间
//获取当前时间
var date=new Date();
//将date设置为过去的时间,减了1毫秒就肯定是过去的时间
date.setTime(date.getTime() - 1);
document.cookie="userId=999;expires="+date.toGMTString();
- 读取cookie,这个读取的值是全部的cookie,读出来的值是一串很长的字符串,需要自己处理切割
document.cookie
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。