保持会话的两个地方
1.网站登录
2.电商购物车
cookie
-----------------------------------
1.cookie保存用户名和hash字段,每登录一个页面(发送一个url请求一个页面)都要将cookie信息发送到服务器
负载均衡服务器都会去数据库去核查这个cookie信息的权限,通过或者不通过
从而用户只需要登陆i一次即可
而接受用户请求的服务器可能每次都不一样
因此对负载均衡器没有要求,什么负载算法都可以
不登录也能保存购物车,因此cookie应该是记录了浏览器的信息
2.服务器返回用户的cookie中插入了服务器的ID字段信息,一般是负载均衡器设置的,保存在负载均衡器上的一张表
负载均衡器指定一个对应关系,如 test123<=>a.local.com 关键字 "test123" 对应 a.local.com
用户首次访问时,负载均衡器会根据算法将该请求转发到一台服务器上,例如a.local.com
然后a.local.com验证完用户身份后,返回给用户一个cookie,包含用户身份验证信息
负载均衡器会在数据返回时,给返回给用户的cookie中插入了“test123”
这样下次携带该cookie的用户访问时,负载均衡器会把该request发送给a.local.com
会话保持成功,需要负载均衡器配合
以上两种都是cookie的身份验证,2 增加的会话保持意义不大,因为服务器每次验证信息都去数据库验证,服务器就相当于一个共享数据库
以上两种共同点是cookie中都保存了用户的身份验证信息,可以直接去数据库验证的
结论是:无论架构怎么样,只要cookie中保存了身份验证信息,就总能保持会话
session
-------------------------------------
session会话保持应该是cookie中不保存用户身份验证信息
用户请求一个页面,输入用户名密码,验证通过
服务器生成一个session id,保存在服务器上
服务器返回给用户一个页面的同时返回一个cookie
cookie中只保存了session id,没有身份验证信息,如用户名密码等
这样下次用户访问时,携带该cookie,服务器收到时,对比本地的sessionid表就可以验证用户登录信息了
如果被负载均衡器后别的服务器收到就无法验证,因为别的服务器显然没有该用户对应sessionid
所以要么使用session共享,将sessionid保存到数据库中;要么让用户每次访问都定向到同一台服务器上
这时就需要通过让负载均衡器往cookie中插入一个字段的方法来实现保持会话了
结论是:在只要cookie中没有保存身份验证信息情况下,需要负载均衡器往cookie中插入字段的方式来实现会话保持