`

同一个Tomcat不同Web应用之间共享会话Session

 
阅读更多
实现两个WEB之间通过session 共享数据

查看tomcat 关于 HTTP Connector 中有个emptySessionPath 其解释如下:

If set to true, all paths for session cookies will be set to /. This can be useful for portlet specification implementations. If not specified, this attribute is set to false.
A side effect to setting this to true, is that if Tomcat creates a new session it will attempt to use the cookie session id if supplied by the client.

设置为true 发现没有用 在网上搜了一下方法 基本是这样的:

由于每个WEB应用程序都有一个唯一的一个ServletContext 实例对象,自己下面的所有的servlet 共享此ServletContext

利用ServletContext 中的setAttribute() 方法把Session 传递过去 然后在另外一个WEB程序中拿到session实例。

1: 修改Tomcat---conf----server.xml文件

     把 <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" x  mlValidation="false"></Host> 修改为:


 <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true" xmlNamespaceAware="false" x  mlValidation="false">

    <Context path="/项目A" reloadable="false" crossContext="true"></Context>
      <Context path="/项目B" reloadable="false" crossContext="true"></Context>

  </Host>

注意 crossContext 属性在帮助文档中意思

crossContext: Set to true if you want calls within this application to ServletContext.getContext() to successfully return a request dispatcher for other web applications running on this virtual host. Set to false (the default) in security conscious environments, to make getContext() always return null.

设置为true 说明你可以调用另外一个WEB应用程序 通过ServletContext.getContext() 获得ServletContext 然后再调用其getattribute() 得到你要的对象.

2:  在项目A中,写入以下代码:

我们假定 项目A 为/myweb

  项目B为 /w2


   //以下内容用于测试同一tomcat下不同项目之间共享session
    HttpSession session = req.getSession();

session.setAttribute("name", "xbkaishui");

session.setMaxInactiveInterval(6565);

  ServletContext ContextA =req.getSession().getServletContext();

  ContextA.setAttribute("session", req.getSession());

//测试

out.println("IN SessionRangleServlet name : "+session.getAttribute("name"));

3.在项目B中,写入以下代码取出Session

  HttpSession session1 =req .getSession(); 

        ServletContext Context = session1.getServletContext(); 

// 这里面传递的是项目a的虚拟路径

        ServletContext Context1= Context.getContext("/myweb");

         System.out.println(Context1);

        HttpSession session2 =(HttpSession)Context1.getAttribute("session");

        System.out.println("base传过来的user为:"+session2.getAttribute("name"));

然后重新部署就行了。



Tomcat下配置Session Cookie位置

最近部署一个Java应用的时候要求Session Cookie位置为根目录 “/” 而不是 /context。在配置Tomcat的时候碰到了一些问题,把我的解决过程写下来,希望给碰到同样问题的朋友一些帮助。


很多时候我们要求 Session Cookie的位置在根目录“/”这样多个应用可以互相交互。Tomcat的默认设置Session Cookie是在 /context 下。


在Tomcat 6 下,修改非常简单,只要在Connector 下增加 emptySessionPath="true" 属性就能解决了。可是到了Tomcat 7 ,这个配置不起作用了。


于是查了 Servlet 3.0 spec,发现Servlet 3.0 是允许 per-context basis 配置的,那么没有理由Tomcat 7 不支持啊。


后来仔细研究了一下 Tomcat 7 的配置,原来Tomcat 7 把这个配置单独出来了,由一个sessionCookiePath属性了。


<Context ... sessionCookiePath="/" > ... </Context>


最后试验了一下,一切OK。








分享到:
评论

相关推荐

    Tomcat 同一服务器上 不同web项目共享session的

    当我们在同一台服务器上部署多个Web项目时,有时需要实现不同Web项目之间的session共享,以便用户在访问一个项目时的数据能够在其他项目中继续有效。本篇文章将深入探讨如何在Tomcat服务器上实现在不同Web项目之间...

    nginx实现多个tomcat7直接session共享所需jar包

    标题中的“nginx实现多个tomcat7直接session共享所需jar包”指的是在分布式系统环境中,使用Nginx作为反向代理服务器,将用户请求分发到多个Tomcat7应用服务器上...在分布式系统中,session共享是...

    nginx+tomcat+redis完成session共享

    这个小例子"nginx+tomcat+redis完成session共享"旨在演示如何通过这三种技术实现跨服务器的用户会话共享,以提升用户体验并简化系统管理。以下是这些技术及其在会话共享中的作用: 1. **Nginx**:Nginx是一款高性能...

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

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

    Tomcat+Redis集群实现session会话共享

    "Tomcat+Redis集群实现session会话共享"这一主题,正是关注如何在使用Tomcat作为应用服务器的环境中,通过集成Redis缓存系统来构建一个高效的、高可用的会话共享解决方案。 首先,我们来理解一下`session`。在Web...

    tomcat7集群实现session共享

    当我们谈论“Tomcat7集群实现session共享”时,我们关注的是如何在多个Tomcat实例之间有效地同步用户会话信息,以便在集群环境中提供高可用性和负载均衡。 首先,理解session共享的重要性。在Web应用中,session是...

    tomcat8集群实现session共享,内含session共享包

    在IT行业中,尤其是在Web服务器领域,Tomcat是一个广泛使用的开源应用服务器,特别是对于Java Servlet和JavaServer Pages(JSP)的应用。在这个场景中,我们关注的是如何在Tomcat集群环境中实现Session共享,以便...

    memcached实现多个tomcat 共享一个session

    标题中的“memcached实现多个tomcat共享一个session”是指在分布式系统中,通过使用memcached作为session存储介质,实现多台Tomcat服务器之间的session共享。这样可以确保用户在集群中的任意一台服务器上登录后,其...

    Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包

    标题 "Tomcat7+Redis+Session 负载之后session 共享 tomcat jar包" 涉及的是在使用Nginx做负载均衡时,如何通过集成Redis来实现Tomcat7服务器之间的Session共享,从而确保用户在不同服务器之间切换时仍然能够保持...

    nginx+tomcat7+memcached session会话保持

    在构建高性能、高可用性的Web应用系统时,会话保持是一个关键环节,它涉及到用户登录状态、购物车信息等重要数据的持久化处理。本文将详细介绍如何在Nginx、Tomcat7和Memcached的环境下实现会话保持,确保用户在多台...

    Tomcat通过自带的Cluster方式实现Session会话共享环境操作记录(个人精华版)

    在IT领域,尤其是在Web应用服务器的管理中,Session会话共享是一个重要的概念,它涉及到用户在不同服务器之间保持登录状态和数据同步的问题。Tomcat,作为Apache软件基金会的一个开源项目,提供了一种内置的Cluster...

    tomcat7tomcat8做redis session共享jar包

    标题中的“tomcat7tomcat8做redis session共享jar包”指的是在Tomcat 7和Tomcat 8这两种不同的Web服务器环境中,通过集成Redis来实现Session的共享功能。Redis是一种高性能的键值存储系统,常被用作分布式环境下的...

    tomcat8-redis-session共享

    这是一个常见的需求,特别是在分布式系统中,为了保持用户会话的一致性,需要将Session数据在多台服务器之间共享。Redis作为一个高性能、内存中的键值数据库,常被用作Session的中央存储,因为它提供了高效的数据...

    tomcat集群session共享解决方案

    然而,当多个Tomcat实例组成一个集群时,session(用户会话)共享成为一个挑战,因为每个实例都有自己的内存空间,无法直接访问其他实例中的session数据。本篇文章将深入探讨Tomcat集群中session共享的解决方案,...

    Nginx+Tomcat+Memcached实现tomcat集群和session共享

    1. **Session复制**:默认情况下,Tomcat会在本地存储Session数据,但在集群环境下,需要配置每个实例之间进行Session复制,以保持会话一致性。 2. **Memcached Session Manager**:安装并配置Tomcat的Memcached ...

    tomcat7+redis单点 session共享jar

    在现代Web应用开发中,确保用户会话在多个服务器之间无缝切换是一项重要的任务。这通常通过session共享技术来实现,特别是在分布式系统环境中。本资源"tomcat7+redis单点 session共享jar"提供了针对Tomcat7服务器和...

    tomcat6 memcache session manager session共享 jar包下载

    标题中的“tomcat6 memcache session manager session共享 jar包下载”揭示了这个压缩包与Tomcat6服务器有关,特别地,它涉及到一个基于Memcache的Session管理器,用于实现跨多个应用服务器的Session共享。Session在...

    Tomcat+Redis实现session会话共享TomcatRedisSessionManager-1.0.zip

    在现代Web应用开发中,session会话管理是一个关键部分,特别是在多服务器环境下,确保用户的会话数据能够在不同的服务器之间共享是必要的。`Tomcat+Redis`的组合提供了一个高效的解决方案来实现这一目标。本项目...

    nginx+tomcat shiro实现多tomcat下session共享

    总结来说,"nginx+tomcat shiro实现多tomcat下session共享"是一种常见的分布式系统架构策略,通过Nginx的负载均衡、Shiro的会话管理以及Redis的中央存储,有效地解决了多服务器环境下session共享的问题,提高了系统...

    tomcat实现session共享

    在IT行业中,尤其是在Web应用开发领域,服务器集群和session共享是一个关键问题。当多个服务器共同处理用户请求时,保持用户会话(session)的一致性是必要的,以确保用户在不同服务器之间切换时不会丢失登录状态或...

Global site tag (gtag.js) - Google Analytics