我可以在 web.xml中关闭 HttpSession 吗?
我想完全消除HttpSession - 我可以在web.xml中执行此操作吗?我确信有特定于容器的方法可以做到这一点(当我进行Google搜索时,这就是搜索结果拥挤的原因)。
附言:这是个坏主意吗?我更喜欢完全禁用东西,直到我真正需要它们。
我想完全消除HttpSession - 我可以在web.xml中执行此操作吗?我确信有特定于容器的方法可以做到这一点(当我进行Google搜索时,这就是搜索结果拥挤的原因)。
附言:这是个坏主意吗?我更喜欢完全禁用东西,直到我真正需要它们。
我想完全消除HttpSession
您无法完全禁用它。您需要做的就是不要通过Web应用程序代码中的任何一个或任何地方来处理它,并确保你的JSP不会通过设置来隐式地做到这一点。request.getSession()
request.getSession(true)
<%@page session="false"%>
如果您主要关心的是实际上禁用了 在 幕后使用的 cookie,那么在 Java EE 5 / Servlet 2.5 中,您只能在特定于服务器的 webapp 配置中执行此操作。例如,在Tomcat中,您可以将属性设置为in元素。HttpSession
cookies
false
<Context>
<Context cookies="false">
另请参阅此 Tomcat 特定文档。这样,会话就不会保留在未被URL重写的后续请求中 - 仅当出于某种原因从请求中获取它时。毕竟,如果你不需要它,只是不要抓住它,那么它根本不会被创建/保留。
或者,如果您已经在使用 Java EE 6 / Servlet 3.0 或更高版本,并且真的想通过 来完成,那么您可以使用 new 元素,如下所示,以将最大期限归零:web.xml
<cookie-config>
web.xml
<session-config>
<session-timeout>1</session-timeout>
<cookie-config>
<max-age>0</max-age>
</cookie-config>
</session-config>
如果你想在你的web应用程序中进行硬编码,以便永远不会返回一个(或“空”),那么你需要创建一个过滤器来监听其中的过滤器,用一个HttpServletRequestWrapper
实现替换,该实现返回所有方法,或者一个虚拟的自定义实现,它什么都不做,甚至抛出。getSession()
HttpSession
HttpSession
url-pattern
/*
HttpServletRequest
getSession()
null
HttpSession
UnsupportedOperationException
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request) {
@Override
public HttpSession getSession() {
return null;
}
@Override
public HttpSession getSession(boolean create) {
return null;
}
}, response);
}
附言:这是个坏主意吗?我更喜欢完全禁用东西,直到我真正需要它们。
如果您不需要它们,请不要使用它们。就这样。真的很:)
如果您正在构建无状态高负载应用程序,则可以禁用使用 Cookie 进行会话跟踪,如下所示(非侵入式,可能与容器无关):
<session-config>
<tracking-mode>URL</tracking-mode>
</session-config>
要强制执行此体系结构决策,请编写如下内容:
public class PreventSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
throw new IllegalStateException("Session use is forbidden");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
throw new IllegalStateException("Session use is forbidden");
}
}
并将其添加到Web.xml并修复失败的地方,但有以下例外:
<listener>
<listener-class>com.ideas.bucketlist.web.PreventSessionListener</listener-class>
</listener>