【发布时间】: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]
现在的问题:
-
当从内网打开应用程序时(请求直接进入应用程序服务器,无需 nginx 代理),cookies 根本不会被缓存。开发者工具显示,响应包含 JSESSIONID cookie,但新请求不使用它并且应用程序中断。
关键时刻:服务器返回安全 cookie
从互联网打开应用程序时(请求通过 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