多站点共享Cookie的时候可能存在这样的问题:A站点需要读取B站点一些用户的历史操作,而这些操作的记录是在B站点完成的。目前使用的是跨域Cookies的方式进行记录,但是由于Cookies本身的限制(如:IE7只能记录40项内容,且Cookies的大小不能超过3k),因此在记录上会存在一些次要功能(如产品浏览记录)的Cookies写入会覆盖主要功能(如用户登录信息)的Cookies的情况,影响站点正常运行。
问题需求:
1、登录用户相关的Cookies的记录和读取
1.1、记录和特定用户相关的历史操作(登录过的UserId…)
2、非登录用户相关的Cookies的记录和读取
2.1、记录和用户无关的公共信息(浏览过的产品…)
解决方案:
将客户端的Cookies记录方式转为服务器端持久化记录方式,达到2个目的:
1、共享会话
1.1、同一个用户在不同客户端共享(登录用户)
1.2、不同用户在同一个客户端共享(非登录用户)
2、压缩客户端cookie
2.1、对于非登录用户每个客户端只存在一个Cookie
2.2、对于登录用户客户端不保留任何Cookie
系统架构:
从这幅图可以看出,整个架构分成3个部分:客户端(各站点)、服务端(可扩展)、存储(集群)
客户端(各站点)引用一个公共控件,此控件提供存取和删除Cookie的接口并通过remoting和服务端通讯,服务端和存储服务器通讯,这样做是为了降低站点与存储服务器之间的耦合度,因为随着存储服务器的变更就不得不修改每个站点配置;另外要对站点服务器访问进行授权也非常方便;服务端的职责主要是接收客户端请求并验证合法性再从存储集群读取或存储Cookie;存储端采用tc技术,由于支持高并发的分布式KEY-VALUE并兼容memcached协议,所以性能相对来说很好。