cookie和session工作流程
cookie流程如下:
当用户第一次访问某网站进行登录时,服务端会通过response.addCookie()创建一个cookie并返回到客户端,客户端将cookie保存在本地;当浏览器关闭时,未设定超时时间以及未持久化到本地磁盘的cookie将会销毁
session流程如下
用户访问浏览器,浏览器将用户信息提交到服务器,服务器调用request.getSession()方法,产生session对象,每个session都有一个独立的sessionid,服务器会以sessionid为键,session对象为值将其储存在map集合中,并将sessionid保存在cookie中返回给客户端,当用户再次访问时,会将携带sessionid的cookie发送给服务器进行验证
cookie和session的异同
相同点:两者都是用来保存用户信息
不同点:
cookie是将用户信息保存在客户端,大小限制为4k,安全性不高,当浏览器关闭时,为设定超时时间以及未持久化到磁盘的cookie会销毁
session是将用户信息保存到服务器端,大小理论上没有限制,安全性较高;服务器默认超时时间为30分钟,session不会因为浏览器的关闭为销毁,但浏览器的关闭会导致携带sessionId的cookie销毁.
session和单点登录
session在分布式中的作用
由于session在不同服务器中是不共享的,在分布式系统中,用户访问不同的系统都需要进行登录,因此,将session集中管理,实现不同系统的session"共享".
常用的方法是将session保存在redis中,当用户登录过一次后,在redis中保存一个以sessionId为k,用户信息为value的键值对,同时将sessionId返回到客户端的cookie中.
单点登录(SSO)
在多系统中,经过一次登录,即可获取全部应用系统的权限,而无需再次登录
单点登录流程
(1)用户首先访问单点登录服务器,进行登录操作
(2)当用户输入的信息正确,则生成用户的token,将用户信息转为json串和token(MD5(盐值+随机数))一起保存到redis缓存当中
(3)服务器将token返回给客户端,将数据保存到浏览器的cookie中
(4)当用户再次登录时,首先会检查浏览器的cookie中是否存在token,然后检查redis中是否为null,如果一切正确,则可以进行页面跳转,如果有一项有误,则返回登录异常,重新登录.
以上是一个初学者的理解,欢迎各位大佬批评指正!