动态每日更新算法题,想要一起学习的小伙伴可以关注一下
文章目录
一、Session
1.什么是Session
简而言之,Session可以认为是服务器中的一块内存数据。
每一个用户登录服务器之后,服务器都会为用户创建一个Session,然后返回一个cookie,下一次用户登录时就可以拿着这个cookie来服务器来校验,这就是免登陆的原理。
2.什么是Cookie
cookie 的出现是因为 HTTP 是无状态的一种协议,换句话说,服务器记不住你,可能你每刷新一次网页,就要重新输入一次账号密码进行登录。这显然是让人无法接受的,cookie 的作用就好比服务器给你贴个标签,然后你每次向服务器再发请求时,服务器就能够 cookie 认出你。
抽象地概括一下:一个 cookie 可以认为是一个「变量」,形如 name=value,存储在浏览器;一个 session 可以理解为一种数据结构,多数情况是「映射」(键值对),存储在服务器上。
3.Session的作用域
有了Cookie之后,每一次访问发放Cookie的网站都会自动携带,但是当域名改变时,Cookie会自动失效。
举个例子:
www.baidu.com 你在百度首页登录了账号
www.baidu.com/video 当你访问百度视频时,Cookie就会失效
1. 跨域(跨服务器)访问问题解决
1.Session一致性
Session复制,在Tomcat服务器之间直接复制Session,但是有一个缺点会占用网络带宽且会占用大量内存,在分布式环境下缺点尤其明显,所以不推荐。
2.Session储存在客户端
客户端存储Session,最大的弊端还是安全性问题
3.Session hash一致性(推荐)
hash一致性可以保证每一次的访问都在同一个服务器。
4.Session统一存储(推荐)
全部存在Redis中,每一次访问只要去数据库查询即可,一般使用Redis存储.
4.单点登录
最后,利用好Session共享的特性,我们就可以实现单点登录,只要登录了淘宝,那么淘宝旗下其他的网页都可以进行免登陆。
二、OAuth2.0
1.社交登录
要想了解什么事OAuth,我们可以先来了解一下什么是社交登录,来看一下csdn的登录页面
在右下角的各种登录方式比如QQ、github、百度和脉脉等都属于社交登录的方式之一。
2.什么是OAuth
OAuth 不是一个API或者服务,而是一个验证授权(Authorization)的开放标准,所有人都有基于这个标准实现自己的OAuth。(也就是社交登录所遵守的一种规则)
更具体来说,OAuth是一个标准,app可以用来实现secure delegated access. OAuth基于HTTPS,以及APIs,Service应用使用access token来进行身份验证。
3.OAuth的流程
1. 授权(第1、2、3步合并)
以QQ登录为例,概括起来的话1、2和3步都只属于我们登录qq,然后给csdn进行授权。
2.csdn拿到访问令牌(第四步)
1、csdn收到QQ的code码
登录成功之后,csdn会收到由QQ返回来的一个code码
比如https://www.csdn.net/success?code=xxxxxxxxxxxxx
2、向QQ索要访问令牌
这里使用Postman来模拟发送code码
这里再使用拿到的code码对QQ进行访问,可以看到在response里面有一个access_token,这个就是访问令牌,可以去QQ服务器拿到相应的信息,当然这里的信息只是相对开放的,不会开放密码等个人隐私信息,一般我们可以拿到头像名字等信息。
3.使用Access_token访问QQ(第五、六步)
这里csdn就可以使用先前拿到的Access_token来获取想要的信息,比如头像名称等。于是社交登录完成,csdn会来辨别你是否是第一次登录,如果是就在数据库中注册并登录,否则直接登录。