我前一天读过apache tomcat文档,我很困惑emptySessionPath
.据我所知,如果设置为true,emptySessionPath
则存储在Web应用程序的根文件夹中.请给出正确的术语定义, emptySessionPath
如果设置为真和假,会发生什么?
请指导我.谢谢.
我有一个托管的应用程序,它使用许多不同的servlet路径.似乎Jetty(GAE使用)为请求URL中的每个上下文路径创建一个新会话.
例:
abc.appspot.com/
abc.appspot.com/path2/hello
每条路径都使用两个不同的会话.有什么方法可以阻止这种情况吗?我遇到了以下配置,可以在Jetty服务器的web.xml文件中使用:
<context-param>
<param-name>org.eclipse.jetty.servlet.SessionPath</param-name>
<param-value>/</param-value>
</context-param>
它对我没有用,我做错了还是不可能?我听说在Tomcat中这是可能的.
我在我的应用程序的web.xml设置Cookie路径(如建议尝试在这里)到:
<session-config>
<cookie-config>
<path>/</path>
</cookie-config>
</session-config>
Run Code Online (Sandbox Code Playgroud)
因此,我分别向localhost:8080/application-a
和部署了两个相同的Web应用程序localhost:8080/application-b
。
每个应用程序都是一个servlet:
public class ControllerServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
HttpSession session = req.getSession(false);
if (session == null) {
session = req.getSession(true);
System.out.printf("No session was present - new one created with JSESSIONID=[%s]\n", session.getId());
} else {
System.out.printf("JSESSIONID cookie was present and HttpSession objects exists with JSESSIONID=[%s]\n", session.getId());
}
}
}
Run Code Online (Sandbox Code Playgroud)
我将应用程序部署到Tomcat 8.5容器(与Tomcat 9进行了尝试,并且行为相同)。当我使用浏览器访问时application-a
,会看到以下内容:
……在Tomcat日志上,我读到:
No session was present …
Run Code Online (Sandbox Code Playgroud)