原创转载请注明出处:http://agilestyle.iteye.com/blog/2367166
Cookie
Cookie可以让服务端程序跟踪每个客户端的访问,但是每次客户端的访问都必须传回这些Cookie,如果Cookie很多,则无形地增加了客户端与服务端的数据传输量,而Session的出现正是为了解决这个问题。
Session
同一个客户每次和服务端交互时,不需要每次都传回所有的Cookie值,而是只要传回一个ID,这个ID是客户端第一次访问服务器时生成的,而且每个客户端是唯一的。这样每个客户端就有了一个唯一的ID,客户端只要传回这个ID就行了,这个ID通常是NAME为JSESSIONID的一个Cookie。
工作方式
Cookie和Session都可以跟踪客户端的访问记录,但是它们的工作方式显然是不同的。
- Cookie通过把所有要保存的数据通过HTTP的头部从客户端传递到服务端,又从服务端再传回到客户端,所有的数据都存储在客户端的浏览器里,所以这些Cookie数据可以被访问到,甚至可以被修改,所以Cookie的安全性收到了很大的挑战。
- Session的安全性要高很多,因为Session是将数据保存在服务端,只是通过Cookie传递一个SessionID而已,所以Session更适合存储用户隐私和重要的数据。
Cookie的安全问题
如果使用Cookie,可以很好地解决应用的分布式部署问题,大型互联网应用系统的一个应用有上百台机器,而且有很多不同的系统协同工作,由于Cookie是将值存储在客户端的浏览器,用户每次访问都会将最新的值带回给处理该请求的服务器,所以也就解决了同一个用户的请求可能不在同一台服务器处理而导致的Cookie不一致的问题,但是这种处理方式会带来很多其他问题
- 客户端Cookie存储限制(Cookie个数的限制为50个, 总大小不超过4KB,超过限制会出现Cookie丢弃)
- Cookie管理的混乱
- Cookie的安全性
解决思路:分布式Session框架(结合Cookie和Session)
Session配置的统一管理
Cookie使用的监控和统一规范管理
Session存储的多元化
Session配置的动态修改
Session加密key的定期修改
充分的容灾机制,保持框架的使用稳定性
Session各种存储的监控和报警支持
Session框架的可扩展性,兼容更多的Session机制和wapSession
跨域名Session与Cookie如何共享的问题。现在同一个网站可能存在多个域名,如何将Session和Cookie在不同的域名之间共享是一个具有挑战性的问题(要实现两个域名下的Session同步,必须将同一个sessionID作为cookie写到两个域名下)。
Reference
深入分析Java Web技术内幕 许令波 著