我们在开发中由于项目大的原因,经常要把项目分为几个不同的子栏目,然后分别放在tomcat的webapps分别分配不同的子域名,此处不涉及到tomcat的集群,比如
Wp.java.com
Wangpeng.java.com
我们在这几个项目中要共享session的信息,因为在一个项目中登录后,点击链接在别的项目中登录的信息也是应该看到的。实现步骤:
1,在tomcat下server.xml中项目中配置以下
<Context path="" docBase="E:/work/java/WebRoot" reloadable="true" debug="0" crossContext="true"></Context>
<Context path="/wp.java.cn" docBase="E:/work/wp.java.cn/WebRoot" debug="0" reloadable="true" crossContext="true"></Context>
注意要设置crossContext="true",这样可以共享ServletContext的内存。我们就是根据共享ServletContext内存来实现session的共享。
2,在登录中的程序是:
session.setAttribute("ubiId", ubi.getId());
ServletContext context = session.getServletContext().getContext("/");
HashMap s_map = (HashMap) context.getAttribute("session_MAP");
String session_id = session.getId();
if(s_map == null) {
s_map = new HashMap();
}
s_map.put(session_id, session);
Cookie cookie = new Cookie("sessionId", session.getId());
//设为负值,在浏览器内存中保存,关闭浏览器,cookie失效
cookie.setMaxAge(-1);
cookie.setPath("/");
context.setAttribute("session_MAP", s_map);
response.addCookie(cookie);
每一个会话都有一个唯一的session,但是在tomcat下只有一个唯一的ServletContext,所以我们要把每一个session放到HashMap 下,然后在利用cookie技术把记录session唯一的id存到浏览器的内存中。切忌不要把session对象直接放到ServletContext中,这样总是保存最后一次登录的session的信息,以上的信息会被覆盖。
3,在另一个项目中取到session的值
ServletContext context = session.getServletContext().getContext("/");
String get_sessionId = "";
String cookieName = "sessionId";
Cookie[] cookies = request.getCookies();
int len = cookies.length;
for(int i=0; i<len; i++) {
Cookie cookie = cookies[i];
String c_name = cookie.getName();
if(c_name.equals(cookieName)) {
get_sessionId = cookie.getValue();
out.println("开始项目的sessionId:" + get_sessionId + "<br/>");
out.println("现在项目的sessionId:" + session.getId() + "<br/>");
}
}
HashMap s_map = (HashMap)context.getAttribute("session_MAP");
if(s_map == null) {
System.out.println("session_MAP is null");
s_map = new HashMap();
} else {
System.out.println("session_MAP is not null");
}
HttpSession session_f = (HttpSession)s_map.get(get_sessionId);
out.println("开始项目的session:" + session_f.getAttribute("ubiId") + "<br/>");
反之也采用同样的方法,这样就可以共享session的值
分享到:
相关推荐
本篇文章将深入探讨C#中如何实现不同域名之间的Session共享,以及这一功能的重要性和应用场景。 Session共享的主要目的是在多个网站或应用之间保持用户的登录状态和其他个性化信息,提高用户体验。默认情况下,ASP...
"PHP实现多服务器session共享之memcache共享"的主题着重于如何在多台服务器之间有效地存储和同步用户的session数据,以确保用户在不同服务器间的会话状态能够保持一致。本文将深入探讨这一主题,并围绕相关知识点...
本篇文章将深入探讨如何在ASP.NET中实现不同应用程序之间的Session共享。 **1. Session工作原理** Session在ASP.NET中基于HTTP协议的隐藏字段或者Cookie来跟踪用户状态。默认情况下,每个Session都有一个唯一的ID,...
使用Redis解决session共享的原理非常简单,就是把原本储存在不同服务器上的session拿出来放到一个独立的服务器上。这样就实现了session共享! Springboot配置session共享 Springboot提供了自动化session共享配置...
通过使用 Redis 作为 Session 存储,多个应用服务器可以共享同一个 Session,从而实现分布式 session 共享。 7. 优点 本方案的优点包括: * 实现分布式 session 共享 * 提高系统的可扩展性和灵活性 * 简化了登录 ...
在was集群中,通常需要设置session共享,按照文档步骤可以完成session共享设置,解决你应用中的问题
在这个场景中,我们关注的是如何在Tomcat集群环境中实现Session共享,以便提高应用程序的可扩展性和可用性。标题和描述提到的“session共享包”是解决这一问题的关键。 **什么是Session?** 在Web应用中,Session是...
总之,这个项目通过合理的技术选型和集成,实现了基于SSM的Web应用的安全控制和session共享,提高了系统的可扩展性和用户体验。在实际开发中,还需要考虑性能优化、异常处理、安全性等问题,以保证系统的稳定和健壮...
标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上,同时实现用户会话(Session)在这些服务器之间的...
在分布式系统中,session共享是一个重要的问题,因为用户在访问不同的服务器节点时,需要保持登录状态和其他会话信息的一致性。Memcached作为一个高性能的分布式内存对象缓存系统,常被用来解决这个问题。 描述中...
SSM+Redis 实现Session共享是现代Web应用中常见的技术组合,主要目的是在分布式系统中保持用户Session的一致性。SSM是指Spring、Spring MVC和MyBatis这三大Java Web开发框架的组合,而Redis则是一种高性能的键值存储...
在IT行业中,尤其是在分布式系统和Web服务开发领域,Session共享是一个关键问题。当多个服务器或服务需要协同工作,为用户提供一致性的会话体验时,如何在集群之间共享Session信息就显得至关重要。本项目"session...
通过引入session共享,即使用户请求被重定向到不同的Tomcat实例,他们也能保持会话状态。 3. **Redis**:Redis是一个内存高速缓存数据库,常用于存储临时数据,如session。在此场景下,当用户在某台Tomcat服务器上...
标题 "Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包" 涉及的是在使用Nginx做负载均衡时,如何通过集成Redis来实现Tomcat7服务器之间的Session共享,从而确保用户在不同服务器之间切换时仍然能够保持...
在IT行业中,Tomcat是一个广泛使用的Java应用服务器,特别是对于Servlet和JSP应用程序。当我们谈论“Tomcat7集群实现session共享”时,我们...正确配置和选择合适的session共享策略是提升应用可用性和性能的重要步骤。
标题中的“tomcat6 memcache session manager session共享 jar包下载”揭示了这个压缩包与Tomcat6服务器有关,特别地,它涉及到一个基于Memcache的Session管理器,用于实现跨多个应用服务器的Session共享。...
总的来说,Redis Session共享是提高Web应用可扩展性和可用性的一种有效方法。通过对"redissession共享代码"的深入研究和实践,开发者可以掌握这一技术,并将其应用到实际项目中,提升用户体验和系统稳定性。
然而,在涉及到多个域名的情况下,传统的Session管理方式会遇到挑战,尤其是在同一个服务器上运行着不同域名的应用时。这时就需要实现跨域名的Session共享。 #### 实现原理 实现跨域名的Session共享主要依赖于以下...
Spring Session 是一个开源项目,由 Pivotal Software 开发,旨在提供一种在分布式环境中实现Session共享的解决方案。在传统的Web应用中,Session信息通常存储在单个服务器的内存中,当应用部署在集群或者分布式环境...