session,中文经常翻译为会话,其本来的含义是指有始有终的一系列动作/消息,比如打电话是从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个session。
session在Web开发环境下的语义又有了新的扩展,它的含义是指一类用来在客户端与服务器端之间保持状态的解决方案。有时候Session也用来指这种解决方案的存储结构。
用户向服务器发送第一个请求时,服务器为其建立一个Session,并为此Session创建一个标识,用户随后的所有请求都应包括这个标识号。服务器会校对这个标识号以判断请求属于哪个Session。会话保持有效,默认状况下,直到浏览器关闭,会话才结束。
当网站服务器只有一台的时候,用Session来解决用户识别是很简单的,但是当网站是一个集群的时候,同一用户的两次请求
可能被分配到两台不同的服务器上处理。怎样保证两次请求中存取的Session值一致呢?还有一个问题:网站规模扩大时,对于一
个具有上亿个访问用户的系统来说,当大部分用户的Session信息都存储在服务端时,要在服务端检索出用户的信息效率就非常低
了,Session管理器不管用什么数据结构和算法都要耗费大量内存和CPU时间。如何解决服务端Session信息的管理?
解决集群Session共享的问题,通常有以下两种办法。
硬件负载,将用户请求分发到特定的服务器。
Session复制,就是将用户的Session复制到集群内所有的服务器。
这两种方法的弊端也很明显:
成本较高。
性能差。当访问量增大的时候,带宽增大,而且随着机器数量的增加,网络负担成指数级上升,不具备高度可扩展性,性能随着服务器数量的增加急剧下降,而且容易引起广播风暴。
这种情况下,淘宝Tbsession框架给予了很好的解决方案,该框架框架致力于解决以下几个问题。
Session的客户端存储,将Session信息存储到客户端浏览器Cookie中。
实现服务端存储,减少Cookie使用,增强用户信息的安全
性,避免浏览器对Cookie数量和大小的限制。
yySession配置统一管理起来,集中管理服务端Session和客户端
Cookie的使用情况,对Cookie的使用做有效的监管。
支持动态更新,Session的配置动态更新