现在的位置: 首页 > 综合 > 正文

HttpSession

2013年10月18日 ⁄ 综合 ⁄ 共 2259字 ⁄ 字号 评论关闭

http://chinaxxren.iteye.com/blog/811604

 

1、Servlet  Session基础

包括servlet session、http cookie原理讲解。

2、Session管理的原理

可以参考一下这篇http://blog.sina.com.cn/s/blog_4a157f470100a81z.html

有几个问题大家思考一下:

         1)、怎样相对准确获取同时在线用户数,怎样实现类似于聊天室的管理员把用户踢出聊天室的功能,怎样实现类似在线聊天室的功能?
      可以借鉴一下clickstream(http://www.opensymphony.com/clickstream/)的实现机制。
         2)、怎样实现同一账号同一时间点只能有一个账号在线

         3)、在多标签的浏览器中(例如ie8、firefox、chrome),用户开几个标签使用同一个web应用,是一个session还是多个session

         4)、struts2中避免用户重复提交同一页面的机制?

         5)、怎样实现类似于gmail、sina等大型网站的用户自动登录功能

         6)、怎样实现类似于在线投票防止同一用户重复投票的功能。具体可以参考以前发过的《基于浏览器的客户跟踪技术概述》

还有其他类似的问题实际上也与Session有关。

3、多台服务器负载均衡情况下的Session管理
前段时间发过一篇写的《多台服务器负载均衡情况下的Session管理》文章,供参考:
   在构建能够灵活地进行水平扩展、高可用性的Java Web应用程序时候,对http session的处理策略很大程度决定了应用程序的扩展性、可用性。一般而言对http session有如下的处理方案:

1、在服务器端不保存Session,完全无状态
     对于不需要保持用户状态的Web应用,采用Stateless是最为恰当的,因此就不存在Session共享的问题。REST (Representational State Transfer) 算是最为典型的例子。

2、基于浏览器Cookie的Session共享
      此种方案把用户相关的Session信息存储到浏览器的Cookie中,也称为客户端Session。
      采用Flash Cookie、URL重写的方式传递Session信息的方案也可以归为此类。
      缺点:只能够存储字符串、数值等基本类型的数据;Cookie大小存在限制;安全性;带宽及数据解压缩、网络传输性能问题。
3、基于数据库的Session共享,实现分布式应用间Session共享
     此种方案把Session信息存储到数据库表,这样实现不同应用服务器间Session信息的共享。诸如Websphere Portal、Weblogic Portal都采用了类似的方案。

     Tomcat Persistent Manager 的JDBC Based Store 提供了类似实现机制,表结构如下:

优点:实现简单

        缺点:由于数据库服务器相对于应用服务器更难扩展且资源更为宝贵,在高并发的Web应用中,最大的性能瓶颈通常在于数据库服务器。因此如果将 Session存储到数据库表,频繁的增加、删除、查询操作很容易造成数据库表争用及加锁,最终影响业务。

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

        一些常用的应用服务器及Servlet容器的Clustering机制可以实现Session Replication的功能,例如Tomcat Clustering/Session Replication、Jboss buddy replication。

         缺点:基于Clustering的Session复制性能很差,扩展性也很不行。
5、基于NFS的Session共享

         通过NFS方式来实现各台服务器间的Session共享,各台服务器只需要mount共享服务器的存储Session的磁盘即可,实现较为简单。但NFS 对高并发读写的性能并不高,在硬盘I/O性能和网络带宽上存在较大瓶颈,尤其是对于Session这样的小文件的频繁读写操作。

        基于磁盘阵列/SAN/NAS等共享存储的方案道理也类似。
6、基于Terracotta、Ehcache、JBossCache等Java Caching方案实现Session共享

    如果系统架构是Java体系,可以考虑采用Terracotta、Ehcache、JbossCache、Oscache等Java Caching方案来实现Session 共享。

    缺点:架构用于非java体系很不方便;对于是诸如静态页面之类的缓存,采用Memcached的方案比Java更为高效
7、基于Memcached/Tokyo Tyrant 等Key-Value DB的Session共享

    整体说来此种方案扩展性最好,推荐使用。

    原理:Tomcat 服务器提供了org.apache.catalina.session.StandardManager 和org.apache.catalina.session.PersistentManager用于Session对象的管理,可以自定义 PersistentManager的

Store 类来实现自己Memcached、Tokyo Tyrant、Redis等Key-Value DB的客户端。 

抱歉!评论已关闭.