一.什么是Session?
一个session是一次短暂的信息交流。交换对象可以是两个或多个设备,或者计算机和用户之间。session的生命历程:建立->撤销->终结。一个建立好的session在每一方都可能不止要交换一个信息。session是有状态的,即交流方至少有一方需要保持状态信息和保存session历史信息。任何一个单向传输都不是一个session。
区分:TCP连接描述的是分散的事件。TCP session描述的是一个持续的状态,它跟踪各种元数据。
session机制采用的是一种在服务器端保持状态
采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的。而session提供了方便管理全局变量的方式 。
session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器。
客户端请求创建一个session时,服务器检查是否已经为他创建过session id;若有,就用此id;否则,为它新创session id。
二.什么是Cookie
Cookies是服务器在本地机器上存储的小段文本。
它随每一个请求发送至同一个服务器。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies 。
cookie机制采用的是在客户端保持状态。
正统的cookie分发是通过扩展HTTP协议来实现的,服务器通过在HTTP的响应头中加上一行特殊的指示以提示浏览器按照指示生成相应的cookie。而cookie的使用是由浏览器按照一定的原则在后台自动发送给服务器的
cookie的内容主要包括:名字,值,过期时间,路径和域。路径与域一起构成cookie的作用范围。这种生命期为浏览器会话期的cookie被称为会话cookie。会话cookie一般不存储在硬盘上而是保存在内存里,当然这种行为并不是规范规定的。若设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie仍然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存里的cookie,不同的浏览器有不同的处理方式。
详见此文
三.利用HAproxy实现粘性会话(sticky session)
HAproxy可以实现负载均衡,当HAproxy配置文件中负载均衡算法为:roundr