【问题标题】:Tomcat HttpSession Cookie SharedTomcat HttpSession Cookie 共享
【发布时间】:2013-01-26 05:33:16
【问题描述】:

我有几个在不同服务器上运行的同一 Web 应用程序的单独实例(都具有不同的面向公众的 IP)。我利用会话来存储当前登录的用户信息。

HttpSession session = req.getSession(true);     

User user = (User)session.getAttribute("user");
if (user == null) {
  // get my user
  session.setMaxInactiveInterval(....);
  session.setAttribute("user", user);
}

问题是,当我登录到一个实例(称为实例 1)然后登录到另一个实例(实例 2)时,当我切换到实例 1 时,它会获取实例 2 的 cookie,显然会产生问题当实例 1 上不存在此类 id 的用户时,更糟糕的是,当它默默地找到与该 id 匹配的用户时..

我查看了 cookie,只有一个 JSESSIONID cookie 是使用“localhost”域创建的,它与所有实例共享。有没有办法设置Tomcat设置域为机器的域?

我正在运行 Tomcat 6.0.35

任何帮助将不胜感激。谢谢!

【问题讨论】:

    标签: java tomcat servlets session-cookies


    【解决方案1】:

    您可以将defaultHost 更改为服务器的hostname(或网络名称)。
    看看Tomcat的conf/server.xml配置文件:

    <Engine ... defaultHost="myserver">
    

    那么你还需要改变:

    <Host ... name="myserver">
    

    见:
    http://tomcat.apache.org/tomcat-6.0-doc/config/engine.html
    http://tomcat.apache.org/tomcat-6.0-doc/config/host.html

    作为另一种可能的解决方案,您可以将jvmRoute 定义为每个实例的“唯一名称”。

    <Engine ... jvmRoute="instance1">
    

    这将生成一个JSESSIONID 类似:

    C85262796BE5F656BD8EF58A96F03C96.instance1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-12
      • 2018-05-02
      • 2016-05-18
      • 1970-01-01
      相关资源
      最近更新 更多