首页 > 代码库 > Servlet体验之旅(二)——Session、Cookie

Servlet体验之旅(二)——Session、Cookie

我们知道SessionCookie都是用于会话跟踪的,只是实现的方式不大一样,那么他们究竟有什么不同呢?下面跟着我脚步来了解一下:

 

SessionCookie的含义:

Session

一种服务器端的技术,在服务器端创建,通常是采用散列表来存储信息,保存的数量可大可小。例如Tomcatsession对象就是采用HashMap存储键值对的。

用于保存每个用户的专用信息。它的生存期是用户持续请求时间加上一段时间。

 

Cookie

一种客户端技术,用于跟踪用户会话的一种方式,当然Session也可以用来跟踪用户会话,只是实现原理有些不同罢了。Cookie是由服务器端发送给客户端的一个信息片段,存储在浏览器的内存中,或者是以文本形式保存在用户的硬盘上。存放的数据量受到限制,大多数浏览器为4K.

Application:

用于保存所有用户的公共数据信息,如果使用Application对象,一个需要考虑的问题是任何操作都要在Application_OnStart事件(global.asax)中完成。

 

下面是一张这三个对象存放数据的一个对比表格:


 

由于本篇文章主要是想比较一下SessionCookie,所以下面重点比较这两者:

1.存取方式:

Cookie:只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要进行UTF-8GBK或者BASE64方式的编码。不能直接存取Java对象。存储稍微复杂的信息,使用Cookie比较困难。

Session:可以存取任何类型的数据,StringIntegerListMap等。可以直接保存Java Bean价值任何java类,对象等。使用起来非常方便。可以把Session看作是一个Java容器类。

2.隐私安全:

Cookie:存储在客户端浏览器中,队客户端是可见的,客户端的一些程序可能窥探,复制甚至修改cookie中的内容。

Session:存储在服务器上,对客户端是透明的,不存在敏感信息泄露的危险。

3.有效期:

Cookie:要想达到长期的记录效果Cookie还是一个比较好的选择。设置maxAge属性

Session:依赖于名为JSESSIONIDcookie,而cookie JSESSIONIDmaxAge默认为-1,只要关闭浏览器该Session就会消失。

4.对服务器的负担:

Cookie:保存在客户端,不占用服务器资源,如果并发浏览的用户非常多,Cookie是很好的选择。

Session:保存在服务器端,每个用户都会产生一个Session。如果并发访问的用户非常多,会产生非常多的Session,消耗大量的内存。


 

5.跨域名:

Cookie:支持跨域名访问。

Session:仅在他所在的域名内有效。

 

高扩展Web应用HTTP Session共享方案:

1.在服务器端不保存Session,完全不状态

2.基于浏览器CookieSession共享。

3.基于数据库的Session共享,实现分布式应用间Session共享

4.基于应用服务器、Servlet容器的Clustering机制

5.基于NFSSession共享

6.基于TerracottaEhcacheJBossCacheJava Caching方案实现Session共享

7.基于Memcached/Tokyo TyrantKey-Value DBSession共享

 

结束语:笔者知识有限,对资料的理解水平也有限,因此这里只是稍作笔记总结,望批评指正。