【问题标题】:Share session data between 2 subdomains在 2 个子域之间共享会话数据
【发布时间】:2011-06-16 06:16:21
【问题描述】:

我正在使用带有 jdk 1.6.0_22 的 tomcat 7.0.6

是否可以在具有共同子域(例如 a.mydomain.com 和 b.mydomain.com)的 2 个不同域之间共享会话数据?

使用默认的 java servlet a.mydomain.com 和 b.mydomain.com 获得不同的会话,但不能为 mydomain.com 中的所有子域创建共享会话吗?

问题还在于我不直接控制 commen 子域 (mydomain.com),因此我无法从 mydomain.com 提供任何 servlet

【问题讨论】:

    标签: java session tomcat servlets


    【解决方案1】:

    将相关 webapp 的<Context> 元素的sessionCookieDomain 属性设置为.mydomain.com(注意前导点,这非常重要)。这将允许网络浏览器在所有子域之间共享 cookie。

    如果您实际上有多个 webapp 上下文,并且您还想在它们之间共享会话,那么您还需要将相关 webapps 的 <Context> 元素的 sessionCookiePath 属性设置为 /。

    简而言之:

    <Context sessionCookieDomain=".mydomain.com" sessionCookiePath="/">
    

    另见:


    对于 Tomcat 6 用户:请注意,这是在 Tomcat 6.0.27 中引入的。对于那些无法升级的用户,您需要一个Valve 来修改cookie 域,最终结合&lt;Connector&gt; 元素中的emptySessionPath 属性/conf/server.xml您想分享会话。

    【讨论】:

    • 酷。前几天刚升级到tomcat 7,没注意到他们添加了那个功能
    • @BalusC 如果我在会话中从一个 webapp 设置一个属性,在将 cookiePath 设置为“/”后,我能否从其他 webapp 获取该属性
    【解决方案2】:

    Servlet Spec 3.0(这是 Tomcat 7 支持的)通过在 SessionCookieConfig 上调用 setDomain 来实现这一点。

    这里的详细信息: http://download.oracle.com/javaee/6/api/javax/servlet/SessionCookieConfig.html

    您可以在 webapp 初始化时使用 ServletContextListner 以编程方式获取 SessionCookieConfig - 或者您应该能够在 web.xml 中将其设置为值。

    【讨论】:

      【解决方案3】:

      您可以使用 cookie 创建自己的会话实现。使用 cookie 和服务器端数据库或文件处理会话(在大多数服务器端语言中)。您创建一个令牌(在时间戳上使用 md5)并将其与所有会话变量一起保存在文件或数据库中。

      【讨论】:

        猜你喜欢
        • 2021-12-26
        • 2011-02-14
        • 2016-12-27
        • 2013-01-19
        • 1970-01-01
        • 1970-01-01
        • 2017-07-03
        • 2012-02-15
        • 2013-02-15
        相关资源
        最近更新 更多