up:: 完成注册接口的编写

说明: 主要是讲和登陆相关的,那为什么会去讲这个内容呢?这是因为我们企业级权限认证,第一步当然就是和登陆有关。那么你登陆的时候我会去对你进行验证,而且你登陆的状态同时是需要保存的,这就是我们这篇博客所要介绍的主要内容。

登陆状态的保存和验证

说明: 我们需要解决的是下面两个问题

session和cookie验证流程图

cookie和session

我们就明白了session其实就是为了解决我们http没有办法去进行状态保存,所以呢我们要特别的为每个用户呢去设置session,主要目标就是去保存相应的一个数据,那么它是什么呢?其实你可以这样理解,session,它是保存在服务端的有数据结构主要是用来跟踪用户状态的,使得在跨页面之后呢依然可以识别用户信息,那么至于这session,他实际保存在哪里,那不管你是保存在redis,还是保存在数据库,或者呢,就干脆保存在内存中,这个都叫session,保存的地点的转移不影响这个session,他功能也不影响了他的名字。

我们再来确认一下cookie是什么,在刚才流程图中我们看到,他是和我们的客户端,也就是和我们访问的用户相关的,它是存储在浏览器中的,那么每次发送请求的时候呢,浏览器带上这个cookie之后,主要就是为了让服务端去辨识出我究竟是哪个用户,那么你会问了。如果有的客户端把cookie禁了怎么办?那么如果说客户端浏览器会把cookie给禁用了,或者这用户他就压根不想去让对方用cookie的方式来追踪,那这时候呢,你通过cookie和session的方式进行用户权限校验就不太方便了,那么用解决方案呢?就是可以每次对 URL进行重写,比如说每次在请求的时候自动在我的URI附上比如说我的 id 是多少多少这样的参数,以便服务端校验,当然,各个浏览器之间他们的规定呢,也是不样的,浏览器一般都会限制你这个cookie的数量不能特别多,而且也不应该占有过多的磁盘空间。

总结

我们主要的就是对于登录以及 http 无状态以及如何保存凭证,如何用session和 cookie 实现鉴权以及整个的流程图做一下介绍和说明,这个是为我们后续做铺垫,那从下一个小节开始,我们将会深入的去理解下session,前面所说的这件呢实际上是一个基础,是一个基本的流程,但是要想深入到细节呢,依然有很多值得我们研究和学习的地方,那我们下期再见。

说明: 个人觉得,有必要上网搜集资料,弄清楚cookie和session的区别

先放一个高赞Cookie和Session的区别(面试必备)_秋风不识路的博客-CSDN博客_cookie与session区别

Cookie 和 Session 的区别(面试必备)

一、共同之处: cookie和session都是用来跟踪浏览器用户身份的会话方式。

二、工作原理: 1.Cookie的工作原理 (1) 浏览器端第一次发送请求到服务器端 (2) 服务器端创建Cookie,该Cookie中包含用户的信息,然后将该Cookie发送到浏览器端 (3) 浏览器端再次访问服务器端时会携带服务器端创建的Cookie (4) 服务器端通过Cookie中携带的数据区分不同的用户

2.Session的工作原理

(1) 浏览器端第一次发送请求到服务器端,服务器端创建一个Session,同时会创建一个特殊的Cookie(name为JSESSIONID的固定值,value为session对象的ID),然后将该Cookie发送至浏览器端 (2) 浏览器端发送第N(N>1)次请求到服务器端,浏览器端访问服务器端时就会携带该name为JSESSIONID的Cookie对象 (3) 服务器端根据name为JSESSIONID的Cookie的value(sessionId),去查询Session对象,从而区分不同用户。 name为JSESSIONID的Cookie不存在(关闭或更换浏览器),返回1中重新去创建Session与特殊的Cookie name为JSESSIONID的Cookie存在,根据value中的SessionId去寻找session对象 value为SessionId不存在**(Session对象默认存活30分钟)**,返回1中重新去创建Session与特殊的Cookie value为SessionId存在,返回session对象 Session的工作原理图

三、区别:

cookie数据保存在客户端,session数据保存在服务端。

session: 简单的说,当你登陆一个网站的时候,如果web服务器端使用的是session,那么所有的数据都保存在服务器上,客户端每次请求服务器的时候会发送当前会话sessionid,服务器根据当前sessionid判断相应的用户数据标志,以确定用户是否登陆或具有某种权限。由于数据是存储在服务器上面,所以你不能伪造。

cookie: sessionid是服务器和客户端连接时候随机分配的,如果浏览器使用的是cookie,那么所有数据都保存在浏览器端,比如你登陆以后,服务器设置了cookie用户名,那么当你再次请求服务器的时候,浏览器会将用户名一块发送给服务器,这些变量有一定的特殊标记。服务器会解释为cookie变量,所以只要不关闭浏览器,那么cookie变量一直是有效的,所以能够保证长时间不掉线。

如果你能够截获某个用户的cookie变量,然后伪造一个数据包发送过去,那么服务器还是 认为你是合法的。所以,使用cookie被攻击的可能性比较大。

如果cookie设置了有效值,那么cookie会保存到客户端的硬盘上,下次在访问网站的时候,浏览器先检查有没有cookie,如果有的话,读取cookie,然后发送给服务器。

所以你在机器上面保存了某个论坛cookie,有效期是一年,如果有人入侵你的机器,将你的cookie拷走,放在他机器下面,那么他登陆该网站的时候就是用你的身份登陆的。当然,伪造的时候需要注意,直接copy cookie文件到 cookie目录,浏览器是不认的,他有一个index.dat文件,存储了 cookie文件的建立时间,以及是否有修改,所以你必须先要有该网站的 cookie文件,并且要从保证时间上骗过浏览器

两个都可以用来存私密的东西,session过期与否,取决于服务器的设定。cookie过期与否,可以在cookie生成的时候设置进去。

四、区别对比: (1)cookie数据存放在客户的浏览器上,session数据放在服务器上 (2)cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session (3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用COOKIE (4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。 (5)所以:将登陆信息等重要信息存放为SESSION;其他信息如果需要保留,可以放在COOKIE中