当前位置:首页 > 开发 > 开源软件 > 正文

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

发表于: 2013-08-08   作者:cwqcwqmax9   来源:转载   浏览:
摘要: 实现两个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 impleme
实现两个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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
tomcat版本:apache-tomcat-6.0.29(次方tomcat6和tomcat7支持) 1.修改D:\apache-tomcat-6.0.29\co
一、前言   nginx 作为目前最流行的开源反向代理HTTP Server,用于实现资源缓存、web server负载
http://huangqiqing123.iteye.com/blog/1966894 memcached-session-manager 简称msm,是一个开源的t
前言 转载请标明出处:http://blog.csdn.net/wlwlwlwl015/article/details/48160433 对于高访问量、
默认情况下,php的session文件是保存在磁盘文件中。在php.ini配置文件中的配置项如下: session.sav
利用Terracotta同步tomcat的Web应用的Session 在一台机器上测试 1.安装tomcat 安装两个tomcat,一个
tomcat6 中关闭服务 会自动把session持久化 存储在work目录下的 一个session.ser 对于Session的管理
Tomcat session共享—MSM 一、原理 MSM(memcached-session-manager) 支持tomcat6 和tomcat7 ,利用
一:结构图 二:环境 测试环境基于 Linux CentOS 7.X,请先安装 tomcat、redis、nginx 相关环境,不
关键字: 跨应用 , session , 共享 , cookie 转自:http://oiote.blog.sohu.com/94812998.html 摘要
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号