我有一个使用 Tomcat7 部署在生产环境中的 Java Web 应用程序。我在生产中使用Tomcat Web Application Manager
页面,在上下文路径"/"处部署我的 WAR。在生产中,我在 URL 中看不到jsessionid
。
但是,在我的开发环境中,在 eclipse 中以 Tomcat7 开头的相同应用程序(因此相同的web.xml
)在 URL 中显示jsessionid
。
我web.xml
中唯一的会话配置是:
<session-config>
<session-timeout>15</session-timeout>
</session-config>
我在两个Tomcat7中看到的唯一区别是server.xml
:
生产:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
</Host>
当地:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt"/>
<Context docBase="MyApp" path="/" reloadable="true" source="org.eclipse.jst.jee.server:MyApp" />
</Host>
另一个区别是我在生产中使用 NGinx 从 Tomcat 从端口 80 到 8080 进行代理传递。
我可能错过了什么?
谢谢
您可以在开发环境中使用不支持(或禁用)Cookie 的浏览器或其他客户端。
另一个提示:您可以在 tomcat 7(在您的 web.xml 文件中使用此代码:
<session-config>
<tracking-mode>COOKIE</tracking-mode>
</session-config>
问题是要使 cookie 正常工作,域名必须至少有两个点 (https://curl.haxx.se/rfc/cookie_spec.html)。
因此,为了使它在本地工作,我必须执行以下操作:
更改/etc/hosts 文件以包含至少带有一个句点的任何域名,指向 127.0.0.1:
127.0.0.1 localhost
127.0.0.1 localhost.test
255.255.255.255 broadcasthost
::1 localhost
更改上下文.xml以包含新域:
<Context sessionCookieDomain=".localhost.test" sessionCookiePath="/">
...
</Context>