Cookie、Session以及Token的区别 以及身份认证 保持登录状态
http协议是无状态的:
关闭网页再次访问服务器,服务器不知道是你再次访问
即客户端进行用户名和密码认证登录,页面关闭后,下一次用户还得再发送一次请求来进行用户认证。
1.cookie
1.1cookie:存储在浏览器的一种数据(一种数据载体)
每次HTTP请求都自动带上cookie数据给服务器
即可在cookie中存储账户和密码,来实现保持登录。
但在浏览器中可以查看保存了哪些cookie,以及cookie中的内容,因此cookie中存储用户名和密码是极为不安全的。
2.基于cookie和session 会话
2.1浏览器与服务器进行会话:
会话的开始—>浏览器访问服务器
会话的结束—>关闭浏览器(服务器设置的时间)
-------不同服务器对用户设置了结束会话的时间和唯一的Session id(一般保存在数据库)
2.2用户访问服务器的过程
1.首先将用户名和密码发送给服务器(第一次请求不会带cookie,因为服务器还没有设置cookie)
2.服务器核对,确认密码正确–>身份验证成功
3.服务器创建session对象包含session id(没有规律的字符串)、会话过期时间以及其他参数
4.服务器设置cookie 将session对象中所有参数加入到cookie中 并发送给用户
5.用户浏览器拿到cookie并且在cookie的value中进行保存
6.以后的每一次访问请求都带上cookie(以及cookie中的session信息) 并在服务器判断session id是否存在 进行验证
7.在登出以及超过设置的会话时间时候 浏览器的cookie就会被删除 需要重新登录
2.3session的优以及存在的问题
2.3.1存在的问题:
1.当大量用户在特定时间内访问服务器时,服务器会产生大量的session id存储在服务器 ,服务器压力增加。
2.当多台服务器时
优点:
1.此时的浏览器cookie是没有保存用户的用户名和密码的,所以是相对安全的.
3.JWT认证机制
2.1 jwt (jason web tooken)
2.1.1什么是jwt
主要在网络应用中传递一些小批量安全数据时使用,它是一个紧凑并且安全的token。
和普通token比较
相同点:都是可以访问资源的令牌,都可以记录用户信息,都只能在验证成功后获取信息。
不同点:服务器验证时,普通token要在数据库进行数据的查询,而jwt验证token只用在服务端使用密钥验证
2.1.2jwt的组成
由三部分组成,中间由点分开
header:头部----->生成签名的算法
payload:负载----->用户的信息
signature:签名----->将header和payload通过base64编码后进行算法(header中声明的算法)运算得到签名信息
2.2 jwt认证机制
1.用户第一次登录网页 服务器生成一个jwt(服务器不保存) 服务器保存生成jwt的签名密文
2.把jwt发送给浏览器(web应用通常使用cookie和local storage存储;app则使用app自己的存储机制存储)
3.浏览器每次发送请求都带上这个jwt
4.服务器通过hear中声明的算法结合hearder和payload进行算法运算得到签名信息与signature进行匹配认证
用app自己的存储机制存储)
3.浏览器每次发送请求都带上这个jwt
4.服务器通过hear中声明的算法结合hearder和payload进行算法运算得到签名信息与signature进行匹配认证