保持会话的两个地方

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中插入字段的方式来实现会话保持