单点登录实现方式,及浅谈cookie和session

单点登录实现方式:

1、session广播机制

参与集群的每个节点的Session状态都被复制到集群中的其他所有节点上,无论何时,只要Session发生改变,Session数据都要重新被复制。Tomcat、JBoss、was都提供了这样的功能,其中Tomcat采用集群节点广播复制,JBoss采用配对复制机制。
·优点:每个节点都复制一份Session,一个节点出现问题时其它节点可以接替它的工作。
·缺点:节点间进行Session同步会占据不少系统资源,整体性能随着集群节点数的增加而急剧下降。

在session广播机制中,会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

Cookie与Session机制

cookie

Cookie是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。
cookie 由服务器生成,发送给浏览器,浏览器把Cookie 以kv形式保存到某个目录下的文本文件内,下一次请求同一网站时会把该cookie发送给服务器。由于Cookie是存在客户端上的,所以浏览器加入了一些限制确保Cookie 不会被恶意使用,同时不会占据太多磁盘空间,所以每个域的Cookie数量是有限的。Cookie相当于服务器给浏览器的一个临时的编号,这个编号与身份绑定,服务器通过编号再去确定你的身份。会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。

session

Session从字面上讲,就是会话。这个就类似于你和一个人交谈,你怎么知道当前和你交
谈的是张三而不是李四呢?对方肯定有某种特征(长相等)表明他就是张三。Session 也
是类似的道理,服务器要知道当前发请求给自己的是谁。为了做这种区分,服务器就要
给每个客户端分配不同的“身份标识”,然后客户端每次向服务器发请求的时候,都带上这
个“身份标识”,服务器就知道这个请求来自于谁了。至于客户端怎么保存这个“身份标
识”,可以有很多种方式,对于浏览器客户端,大家都默认采用Cookie 的方式。服务器
使用Session把用户的信息临时保存在了服务器上,用户离开网站后Session会被销
毁。这种用户信息存储方式相对Cookie来说更安全,可是 Session有一个缺陷:如果web服务器做了负载均衡,那么下一个操作请求到了另一台服务器的时候Session会丢失。

Cookie和Session的区别

作用范围不同,Cookie保存在客户端(浏览器),Session保存在服务端。
存取方式的不同,Cookie只能保存ASCll,Session可以存任意数据类型,一般情况下我们可以在Session中保存一些常用变量信息,比如Userld等。
隐私策略不同,Cookie存储在客户端,比较容易遭到不法获取,早期有人将用户的登录名和密码存储在Cookie中导致信息被窃取。Session存储在服务端,安全性相对于Cookie要好很多。
存储大小不同,单个Cookie保存的数据不能超过4K,Session可存储数据远高于Cookie。

2、cookie+redis

用户在项目的任意一个模块登录后,该模块会将用户的登录信息放到 redis和cookie 中。
·系统会先将用户的登录信息存入redis中,其在redis的 key 值是生成的唯一值(可以包含IP、用户 id、UUID等值), value值存放用户的登录信息。
·然后系统会将这名用户在redis 中的 key值存入该用户的cookie中,用户每次访问任意模块时都会带着这个cookie,·用户在访问其他模块发送请求时,都会带着客户端的cookie进行请求,而客户端的cookie已经存入了该用户在redis中的 key值,这样其他模块在处理用户的请求时,可以先获取用户cookie中的 key值,然后拿着这个key值到 redis中进行查询,如果在 redis 中能查询到该用户相应的登录信息,就说明该用户已登录,就不需要用户进行重复登录了。

3、token

token 是按照一定规则生成的字符串,字符串中可以包含用户信息。开发人员可以自行定制这个生成规则,也可以使用提供好的生成规则(如使用JWT自动生成包含用户信息的字符串)。
用户在项目的某个模块进行登录后,系统会按照一定的规则生成字符串,把用户登录之后的信息包含到这个生成的字符串中,然后系统可以将这个字符串返回,主要有两种返回方式:
可以把字符串通过cookie返回;
这样用户在访问其他的模块时,每次访问的地址栏都会带着生成的字符串(或者cookie 中带着生成的字符串),被访问模块就可以获取地址栏中的生成字符串(或者获取cookie中的生成字符串),然后根据字符串获取用户信息,如果可以获取到用户的登录信息,说明该用户已登录,用户就不需要重复登录了。
现阶段基本上都是使用token做处理,一方面token拼接之后,能够进行加密,保证每一次数据传输的安全性,另一方面则是验证访问用户信息。

  • 21
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值