`

转:Session 管理

 
阅读更多

 

原帖:http://hi.baidu.com/jlh_jianglihua/item/9007f429de1855ff51fd87a5

 

最近一个项目中用到了getsession根据sessionid来获取session,但是怎么获取都为空,请教N多人,才发现在servlet的api中有如下:

         HttpSession HttpSessionContext.getSession(java.lang.String sessionId)
      
       不赞成的用法.   Java Servlet API的版本 2.1中,还没有将之替换掉。该方法必须返回一个空值,且将会在未来的版本中被抛弃掉。

       最新的解决办法是通过实现HttpSessionListener的sessionCreated和sessionDestroyed来实现

       解决步骤:
      
       1、在web.xml增加监听:

     <listener>
           <listener-class>com.aceway.util.LoginSessionListener</listener-class>
     </listener>

       2、LoginSessionListener:  
           LoginSessionListener方法实现了HttpSessionListener,并且重写sessionCreated和sessionDestroyed方法
        
           public static Map userMap = new HashMap();                                 //创建了一个对象来保存session的
           private   MySessionContext myc=MySessionContext.getInstance();   //MySessionContext是实现session的读取和删除增加   单例模式

         public void sessionCreated(HttpSessionEvent event)
         {
             myc.AddSession(event.getSession());
         }
         public void sessionDestroyed(HttpSessionEvent event)
         {
         HttpSession session = event.getSession();
         myc.DelSession(session);
         }

     3、session的单例管理

Java代码
package com.aceway.flex;  
import java.util.*;  
import javax.servlet.http.HttpSession;  
public class MySessionContext    
{  
     private static MySessionContext instance;  
     private HashMap mymap;  
     private MySessionContext()  
     {  
         mymap = new HashMap();  
     }  
     public static MySessionContext getInstance()  
     {  
         if(instance==null)  
         {  
             instance = new MySessionContext();  
         }  
         return instance;  
     }  
     public synchronized void AddSession(HttpSession session)  
     {  
         if(session!=null)  
         {  
             mymap.put(session.getId(), session);  
         }  
     }  
     public synchronized void DelSession(HttpSession session)  
     {  
         if(session!=null)  
         {  
             mymap.remove(session.getId());  
         }  
     }  
     public synchronized HttpSession getSession(String session_id)  
     {  
         if(session_id==null)return null;  
         return (HttpSession)mymap.get(session_id);  
     }  
}  

4、这样我们就可以单例来获取session
     private MySessionContext myc=MySessionContext.getInstance();
       HttpSession session = myc.getSession(SessionId);

分享到:
评论

相关推荐

    (转)讲解各种session

    【标题】讲解各种Session 在计算机编程特别是Web开发中,Session是用于跟踪用户状态的一种机制。它是服务器端存储用户信息...不同的编程语言和环境提供了丰富的Session管理工具,开发者应根据项目需求选择合适的策略。

    session介绍

    - **内存管理**:大量用户会导致服务器内存中的Session数量增加,因此需要合理设置Session过期时间和使用Session缓存策略,如分布式Session存储,以减轻服务器内存压力。 - **安全性**:Session ID应具有高随机性...

    获取SessionID

    ### 获取SessionID方法详解 在Web开发中,Session是一种常用的技术,...在实际开发中,开发者应根据项目需求选择合适的获取SessionID的方式,同时注意Session的安全性和有效性管理,确保用户数据的安全和隐私保护。

    asp.net c# 在类中使用session的方法

    在Web应用程序开发中,特别是在ASP.NET C#应用中,正确且有效地在类中使用Session是非常重要的,这能帮助我们实现用户个性化体验、购物车管理、登录状态维护等功能。 ### 一、理解ASP.NET中的Session Session对象...

    集群环境下memcache解决session共享

    在单台服务器上,session管理相对简单,但在集群环境下,由于多台服务器之间无法直接共享内存中的session数据,可能导致用户在切换服务器时丢失session信息,从而影响用户体验。 为了解决这个问题,我们可以引入...

    session之用户交互间隔&&session持久化

    根据给定文件的信息,本文将围绕“Session 用户交互间隔与 Session 持久化”这一主题进行深入探讨,包括 Session 的基本概念、Tomcat 中 Session 的管理方式、Session 的持久化机制以及用户交互间隔等内容。...

    SSHnote session函数的对象状态转换

    SSHnote session函数的对象状态转换是Hibernate框架中一个关键的概念,涉及到如何管理数据库中的持久化对象。在Hibernate中,对象有三种基本状态:瞬时(Transient)、持久化(Persistent)和脱管(Detached)。理解...

    session-spark:session分析

    - 根据资源管理和性能需求选择合适的运行模式(本地、集群等)。 - 考虑使用持久化机制(如Cache或Checkpoint)来减少重复计算。 通过以上内容,我们了解到如何利用Spark和Java进行session分析,从数据加载、...

    tomcat8+memcached session共享

    2. `memcached-session-manager-1.8.3.jar`:这个库提供了session管理器,实现了将Tomcat的session数据存储到Memcached的能力。 3. `kryo-1.04.jar` 和 `kryo-serializers-0.11.jar`:Kryo是一个快速、高效的序列化...

    springboot +shiro+redis实现session共享(方案二)1

    * 简化了登录 session 的管理 8. 结论 本文档介绍了如何使用 Spring Boot、Shiro 和 Redis 实现分布式 session 共享,以解决 Web 应用程序的登录 session 统一问题。通过使用 Redis 作为 Session 存储和 Shiro ...

    Mybatis案例:员工管理系统

    在这个员工管理系统案例中,我们将深入探讨Mybatis如何帮助开发者构建一个高效、灵活的数据访问层。 首先,Mybatis的核心是XML或注解方式配置的SQL映射文件,这些文件将SQL语句与Java代码分离,提高了代码的可读性...

    Hibernate-nosession

    nosession模式并不意味着完全不使用Hibernate,而是尽量减少对Session的依赖,转而使用其他API,例如Query或Criteria API来执行数据库查询。 在实际的代码案例中,我们可以利用SessionFactory的openSession()方法来...

    SessionConverter, SecurtCRT迁移到XShell的Session工具

    在IT行业中,远程终端管理是日常运维和开发工作的重要部分,SSH(Secure Shell)客户端如SecureCRT和XShell扮演着关键角色。SecureCRT是一款广泛使用的SSH客户端,而XShell以其用户友好的界面和强大的功能也深受用户...

    msm集群session共享

    其中,`storeDir`参数指定session数据的存储位置,`implementation`指定session管理器类型,`serializer`指定序列化方式。 3. **集群配置**:确保所有Tomcat实例能够发现并通信。这可能涉及到网络设置、DNS配置...

    session对象及其常用方法

    Session 对象主要用于属性操作和会话管理,常用方法包括: 1. public void setAttribute(String name, Object value):设定指定名字的属性的值,并将它添加到 Session 会话范围内,如果这个属性是会话范围内存在,...

    Tomcat memcached Session依赖jar包

    在Tomcat中集成memcached作为Session管理器,可以将Session数据分布在网络中的多个节点上,实现Session复制和高可用性。 为了在Tomcat中使用memcached进行Session管理,你需要以下关键的依赖jar包: 1. **...

    tomcat-redis-session-manager-2.0.0.zip

    在现代Web应用中,Session管理是至关重要的一个环节,它用于存储用户的状态信息,如登录状态、购物车等。然而,随着分布式系统的普及,单个服务器上的Session管理已经无法满足需求,因此出现了Session共享的需求。`...

    tomcat+redis实现session共享

    如果没有提供现成的库,我们需要自行下载并添加Apache Tomcat的Session管理器扩展,如`tomcat-redis-session-manager`。 4. **配置应用**:在Web应用的`web.xml`中,设置Session的超时时间和其他配置。例如: ```...

    7、JAVA培训之JSP基础05_session对象笔记[整理].pdf

    而Cookie由客户端管理,服务器压力较小。 - 使用原则:避免在Session中存储大量或敏感信息,减少Session的使用,因为Session依赖于Cookie,若Cookie被禁用,Session功能也将受到影响。 接下来的学习内容包括...

    tomcat6+session+memcached

    2. **Session管理**:理解HTTP协议无状态特性,以及Session在Web应用中的作用,如存储用户状态信息。 3. **Memcached集成**:在Tomcat中集成Memcached,需要配置`context.xml`,定义连接到Memcached服务器的参数,...

Global site tag (gtag.js) - Google Analytics