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); } }
相关推荐
在IT行业中,尤其是在Web开发领域,Session共享是一个重要的议题,特别是在多服务器集群环境中。本案例主要探讨了如何在Tomcat7容器中,基于Java7环境,利用Redis来实现在多个服务器间Session数据的共享。这有助于...
我们需要将项目 appA 和项目 appB 设置在同一个域中,以便实现跨项目 Session 共享。 3. 项目 appA 设置 Session 及 Cookie 在项目 appA 中,我们需要设置 Session 及 Cookie,以便实现 Session 共享。 4. 项目 ...
使用Redis解决session共享的原理非常简单,就是把原本储存在不同服务器上的session拿出来放到一个独立的服务器上。这样就实现了session共享! Springboot配置session共享 Springboot提供了自动化session共享配置...
- **共享性**:所有服务器都能访问同一个Session,解决了分布式环境下的Session问题。 - **可扩展性**:随着服务器数量增加,Session管理依然有效。 - **持久化**:Redis可以配置持久化策略,防止数据丢失。 6. ...
在Web开发中,当一个应用程序部署在多个服务器上形成集群时,如何实现多个服务器之间Session的共享成为了一个关键问题。由于Session是存储在单个服务器内存中的,因此默认情况下,不同服务器无法直接访问彼此的...
通过引入session共享,即使用户请求被重定向到不同的Tomcat实例,他们也能保持会话状态。 3. **Redis**:Redis是一个内存高速缓存数据库,常用于存储临时数据,如session。在此场景下,当用户在某台Tomcat服务器上...
在IT行业中,session共享是一个重要的概念,特别是在分布式系统或者多服务器环境下的Web应用。当用户在网站上进行操作时,服务器会创建一个session来存储用户的会话信息,如登录状态、购物车等。然而,如果一个网站...
Tomcat7是Apache软件基金会的一个开源项目,是一个流行的Java Servlet容器,常用于部署Web应用程序。Redis则是一种高性能的键值存储系统,常被用作缓存服务,以提高系统的响应速度和数据一致性。当我们在多台Tomcat...
但是,当应用部署在多台服务器上时,每个服务器都维护自己的Session,这就无法实现Session共享,导致用户在不同服务器间切换时可能需要重新登录。 为了解决这个问题,引入了Memcached作为Session的存储后端。...
将session数据保存在Redis中,所有服务器都可以访问同一个数据源,实现session共享。 集成Tomcat和Redis实现session共享的基本步骤如下: 1. **安装Redis**:首先确保在服务器上已经安装了Redis,并启动了服务。 ...
在现代Web应用开发中,Session共享是一个常见的需求,特别是在分布式系统中。`SpringSession` 是一个优秀的框架,它提供了一种优雅的方式来进行Session管理,尤其是跨服务器的Session共享。配合`Redis`作为存储后端...
Tomcat6是Apache软件基金会的Jakarta项目下的一个开源Java Servlet容器,支持Servlet和JSP标准。由于单个Tomcat服务器可能无法应对高流量,所以通常会配置多台Tomcat实例,这就涉及到用户Session的共享问题。Session...
综合以上,我们可以构建一个完整的流程:使用ANT自动化构建Java项目,同时通过SVN管理代码版本,然后将构建好的应用部署到Nginx+Tomcat的架构中,实现负载均衡和Session共享。这样的架构不仅提高了系统的可用性和...
在分布式系统中,Session共享是一个常见的挑战,尤其是在多个应用服务器之间。`Redis`作为一个高性能的键值存储系统,常被用作Session缓存,以实现跨服务器的Session共享。本主题将深入探讨如何在`Tomcat7`中利用`...
这个项目的核心目的是演示如何通过Redis来解决Session共享的问题,以实现在多服务器环境下的用户会话一致性。下面我们将深入探讨其中涉及的技术和知识点。 1. **SpringMVC**:作为Spring框架的一部分,SpringMVC是...
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共享。 **Tomcat7** 是一个广泛使用的开源Java Servlet容器,它实现了Java EE的Web应用...
在IT行业中,尤其是在分布式系统开发中,Session共享是一个重要的议题。传统的Web服务器,如Tomcat,通常会在单个服务器上管理用户的Session数据。然而,随着Web应用规模的扩大,单体架构逐渐转向分布式架构,...
在单个服务器上,Session可以通过内存来管理,但在分布式环境下,多个服务器无法共享同一个内存中的Session,这就需要引入外部存储来实现Session共享。 Redis是一个高性能的键值数据库,常被用作缓存和会话存储解决...
在分布式系统中,Session共享是一个常见的需求,尤其是在使用Tomcat这样的Servlet容器时。"tomcat-redis-session-manager"是一个解决方案,它将用户的Session信息存储在Redis缓存服务器中,从而实现跨服务器的...