`
lvjun106
  • 浏览: 436208 次
  • 性别: Icon_minigender_1
  • 来自: 芜湖
社区版块
存档分类
最新评论

同一个容器下,不同的项目间的SESSION是不能共享的

 
阅读更多

Case Review:

 

当前项目A下要跳转到项目B的页面中,并且要从A里面传一些值过去。

值被放在A的SESSION中,但是B中未获取到。

 

解决方案:

1. 直接在跳转到B项目下的地址后面加入参数,例如?test=test

2. 共享当前SESSION。

//项目A下
request.getSession().getServletContext().setAttribute("session", request.getSession());
//项目B下
request.getSession.getServletContext().getContext("项目A").getAttribute("session");

 

 

根源:

是容器在实现request.getSession()方法时,是从Context中获取和创建的,所以不同的项目间才会出现SESSION不共享。<--  这只针对TOMCAT6.0 作出的结论,可能不同的容器实现机制会不同。

 

protected Session doGetSession(boolean create) {

    // There cannot be a session if no context has been assigned yet
    if (context == null)
        return (null);

    // Return the current session if it exists and is valid
    if ((session != null) && !session.isValid())
        session = null;
    if (session != null)
        return (session);

    // Return the requested session if it exists and is valid
    Manager manager = null;
    if (context != null)
        manager = context.getManager();
    if (manager == null)
        return (null);      // Sessions are not supported
    if (requestedSessionId != null) {
        try {
            session = manager.findSession(requestedSessionId);
        } catch (IOException e) {
            session = null;
        }
        if ((session != null) && !session.isValid())
            session = null;
        if (session != null) {
            session.access();
            return (session);
        }
    }

    // Create a new session if requested and the response is not committed
    if (!create)
        return (null);
    if ((context != null) && (response != null) &&
        context.getCookies() &&
        response.getResponse().isCommitted()) {
        throw new IllegalStateException
          (sm.getString("coyoteRequest.sessionCreateCommitted"));
    }

    // Attempt to reuse session id if one was submitted in a cookie
    // Do not reuse the session id if it is from a URL, to prevent possible
    // phishing attacks
    if (connector.getEmptySessionPath() 
            && isRequestedSessionIdFromCookie()) {
        session = manager.createSession(getRequestedSessionId());
    } else {
        session = manager.createSession(null);
    }

    // Creating a new session cookie based on that session
    if ((session != null) && (getContext() != null)
           && getContext().getCookies()) {
        Cookie cookie = new Cookie(Globals.SESSION_COOKIE_NAME,
                                   session.getIdInternal());
        configureSessionCookie(cookie);
        response.addCookieInternal(cookie, context.getUseHttpOnly());
    }

    if (session != null) {
        session.access();
        return (session);
    } else {
        return (null);
    }

}

 

 

 

分享到:
评论

相关推荐

    tomcat容器 实现session共享案例

    在IT行业中,尤其是在Web开发领域,Session共享是一个重要的议题,特别是在多服务器集群环境中。本案例主要探讨了如何在Tomcat7容器中,基于Java7环境,利用Redis来实现在多个服务器间Session数据的共享。这有助于...

    使用tomcat,J2EE同域中跨项目session共享实现

    我们需要将项目 appA 和项目 appB 设置在同一个域中,以便实现跨项目 Session 共享。 3. 项目 appA 设置 Session 及 Cookie 在项目 appA 中,我们需要设置 Session 及 Cookie,以便实现 Session 共享。 4. 项目 ...

    Springboot实现多服务器session共享

    使用Redis解决session共享的原理非常简单,就是把原本储存在不同服务器上的session拿出来放到一个独立的服务器上。这样就实现了session共享! Springboot配置session共享 Springboot提供了自动化session共享配置...

    javaWEB项目解决session不共享,一用见效,很详细

    - **共享性**:所有服务器都能访问同一个Session,解决了分布式环境下的Session问题。 - **可扩展性**:随着服务器数量增加,Session管理依然有效。 - **持久化**:Redis可以配置持久化策略,防止数据丢失。 6. ...

    web项目集群时共享session方案实践

    在Web开发中,当一个应用程序部署在多个服务器上形成集群时,如何实现多个服务器之间Session的共享成为了一个关键问题。由于Session是存储在单个服务器内存中的,因此默认情况下,不同服务器无法直接访问彼此的...

    nginx+tomcat+redis完成session共享

    通过引入session共享,即使用户请求被重定向到不同的Tomcat实例,他们也能保持会话状态。 3. **Redis**:Redis是一个内存高速缓存数据库,常用于存储临时数据,如session。在此场景下,当用户在某台Tomcat服务器上...

    session共享jar包(三个)

    在IT行业中,session共享是一个重要的概念,特别是在分布式系统或者多服务器环境下的Web应用。当用户在网站上进行操作时,服务器会创建一个session来存储用户的会话信息,如登录状态、购物车等。然而,如果一个网站...

    tomcat7+redis集群 session共享jar

    Tomcat7是Apache软件基金会的一个开源项目,是一个流行的Java Servlet容器,常用于部署Web应用程序。Redis则是一种高性能的键值存储系统,常被用作缓存服务,以提高系统的响应速度和数据一致性。当我们在多台Tomcat...

    session和memcached共享需要的jar

    但是,当应用部署在多台服务器上时,每个服务器都维护自己的Session,这就无法实现Session共享,导致用户在不同服务器间切换时可能需要重新登录。 为了解决这个问题,引入了Memcached作为Session的存储后端。...

    tomcat8-redis实现session共享jar包

    将session数据保存在Redis中,所有服务器都可以访问同一个数据源,实现session共享。 集成Tomcat和Redis实现session共享的基本步骤如下: 1. **安装Redis**:首先确保在服务器上已经安装了Redis,并启动了服务。 ...

    SpringSession+Redis实现Session共享案例

    在现代Web应用开发中,Session共享是一个常见的需求,特别是在分布式系统中。`SpringSession` 是一个优秀的框架,它提供了一种优雅的方式来进行Session管理,尤其是跨服务器的Session共享。配合`Redis`作为存储后端...

    nginx+tomcat6+session共享

    Tomcat6是Apache软件基金会的Jakarta项目下的一个开源Java Servlet容器,支持Servlet和JSP标准。由于单个Tomcat服务器可能无法应对高流量,所以通常会配置多台Tomcat实例,这就涉及到用户Session的共享问题。Session...

    nginx+tomcat的负载均衡session共享和ant构建全流程

    综合以上,我们可以构建一个完整的流程:使用ANT自动化构建Java项目,同时通过SVN管理代码版本,然后将构建好的应用部署到Nginx+Tomcat的架构中,实现负载均衡和Session共享。这样的架构不仅提高了系统的可用性和...

    redis tomcat7 session共享

    在分布式系统中,Session共享是一个常见的挑战,尤其是在多个应用服务器之间。`Redis`作为一个高性能的键值存储系统,常被用作Session缓存,以实现跨服务器的Session共享。本主题将深入探讨如何在`Tomcat7`中利用`...

    ssm demo(通过redis解决session共享的问题)

    这个项目的核心目的是演示如何通过Redis来解决Session共享的问题,以实现在多服务器环境下的用户会话一致性。下面我们将深入探讨其中涉及的技术和知识点。 1. **SpringMVC**:作为Spring框架的一部分,SpringMVC是...

    tomcat9+apr+redissession共享

    1. **Tomcat 9**:这是Apache Tomcat服务器的一个版本,它是一个开源的Java Servlet容器,用于部署和运行Java Web应用程序。Tomcat 9支持Java EE 8标准,提供了高性能和稳定性。 2. **Apache Portable Runtime (APR...

    tomcat7+redis单点 session共享jar

    本资源"tomcat7+redis单点 session共享jar"提供了针对Tomcat7服务器和Redis数据存储的一个解决方案,以实现跨服务器的session共享。 **Tomcat7** 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用...

    tomcat+redis实现session共享

    在IT行业中,尤其是在分布式系统开发中,Session共享是一个重要的议题。传统的Web服务器,如Tomcat,通常会在单个服务器上管理用户的Session数据。然而,随着Web应用规模的扩大,单体架构逐渐转向分布式架构,...

    Tomcat8(Tomcat9)+redis实现Session共享(支持Redis集群)

    在单个服务器上,Session可以通过内存来管理,但在分布式环境下,多个服务器无法共享同一个内存中的Session,这就需要引入外部存储来实现Session共享。 Redis是一个高性能的键值数据库,常被用作缓存和会话存储解决...

    tomcat-redis-session-manager实现session共享 配置文件

    在分布式系统中,Session共享是一个常见的需求,尤其是在使用Tomcat这样的Servlet容器时。"tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的...

Global site tag (gtag.js) - Google Analytics