【问题标题】:JSESSIONID cookie is not stored in browserJSESSIONID cookie 未存储在浏览器中
【发布时间】:2018-04-05 05:19:27
【问题描述】:

在不同的场景中,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 代理),cookies 根本不会被缓存。开发者工具显示,响应包含 JSESSIONID cookie,但新请求不使用它并且应用程序中断。

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

  2. 从互联网打开应用程序时(请求通过 nginx 代理),缓存 cookie。应用程序工作正常。但是 cookie 不安全,尽管它们可能(因为配置了 tomcat 并且我们通过 HTTPS 运行)。

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

更新

我删除了

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

来自 web.xml(它旨在使所有 cookie 安全,我在 web 的某个地方找到它)

之后,问题 1 解决了(cookie 现在被缓存了),问题 2 也解决了(cookie 是安全的)。 老实说,我不懂这个魔法,想听听专家的解释。

【问题讨论】:

  • 第一种情况,开发者工具中cookie上的“路径”是什么?你可以为第一种情况发布 Set-Cookie 响应吗?
  • 在第一种情况下,新请求不是 HTTPS,因此它们不携带安全 cookie。
  • @GradyGCooper 这里是:Set-Cookie:JSESSIONID=541D1542C7024C5515BBA1B358442FC8;路径=/app/;安全的;仅限 Http。我通过更改 web.xml 设置意外修复了第一个错误,我将更新问题以澄清情况。
  • 另外,应该使用/app 而不是/app/ 作为路径。
  • @bayu.io jsessionid cookie是tomcat服务器设置的,我不能强制设置其他路径。

标签: java apache tomcat cookies nginx


【解决方案1】:

您可以使用

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

上下文

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2021-06-29
    • 2021-06-04
    • 2016-10-30
    • 2012-01-22
    • 2020-05-05
    • 2021-10-13
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多