JSESSIONID cookie未存储在浏览器中

时间:2015-05-18 13:25:34

标签: java apache tomcat cookies nginx

我在不同的场景中遇到了一些 JSESSIONID cookie的问题。我已经阅读了很多信息,但是如果事情没有按预期发挥作用,那就太疯狂了。

长话短说,我在代理服务器(nginx)后面有一个Web服务器。代理使用HTTPS处理请求(并将HTTP重定向到HTTPS),代理也具有LDAP授权(无论如何都是无关紧要的)。

在Web服务器上配置apache代理,从443(https)重定向到80端口。 Web服务器是Tomcat,它在server.xml中配置为使用安全cookie(连接器设置)。

总结

[browser] ----->  [nginx proxy] -----> [tomcat app server]

现在出现问题:

  1. 当从内部网打开应用程序时(请求直接转到没有nginx代理的应用程序服务器),cookie根本不会被缓存。开发人员工具显示,响应包含 JSESSIONID cookie,但新请求不使用它并且应用程序中断。

    关键时刻:服务器返回安全 Cookie

  2. 当从互联网上打开应用程序(请求通过nginx代理)时,会缓存Cookie。应用程序正常。但Cookie 不安全,但可能(因为tomcat已配置且我们通过HTTPS运行)。

  3. 所以,我想了解为什么在第一种情况下不缓存cookie以及为什么在第二种情况下cookie不安全。

    更新

    我删除了

    <session-config>
        <cookie-config>
            <secure>true</secure>
        </cookie-config>
    </session-config>
    

    来自web.xml(它的目的是让所有的cookie都安全,我发现它在web中的某个地方)

    之后,问题1解决了(现在缓存了cookie),问题2也解决了(cookie是安全的)。 老实说,我不明白这种魔法,并希望听到一些专家的解释。

1 个答案:

答案 0 :(得分:0)

您可以使用

删除Cookie的尾部斜杠
sessionCookiePathUsesTrailingSlash="false"

用于上下文