我想完全消除 HttpSession - 我可以在 web.xml 中这样做吗?我确信有特定于容器的方法可以做到这一点(当我进行谷歌搜索时,这就是搜索结果中拥挤的原因)。
PS 这是个坏主意吗?我更喜欢完全禁用某些东西,直到我真正需要它们为止。
原文由 les2 发布,翻译遵循 CC BY-SA 4.0 许可协议
我想完全消除 HttpSession - 我可以在 web.xml 中这样做吗?我确信有特定于容器的方法可以做到这一点(当我进行谷歌搜索时,这就是搜索结果中拥挤的原因)。
PS 这是个坏主意吗?我更喜欢完全禁用某些东西,直到我真正需要它们为止。
原文由 les2 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果您正在构建一个无状态的高负载应用程序,您可以像这样禁用使用 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>
原文由 Dmytro Voloshyn 发布,翻译遵循 CC BY-SA 3.0 许可协议
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
你不能完全禁用它。您需要做的就是 不要 通过
request.getSession()
或request.getSession(true)
在您的 web 应用程序代码中的任何位置获取它的句柄,并确保您的 JSP 不会隐式地执行此操作设置<%@page session="false"%>
。如果您主要关心的是禁用在
HttpSession
幕后使用的 cookie,那么您可以在 Java EE 5 / Servlet 2.5 中仅在服务器特定的 webapp 配置中这样做。例如,在 Tomcat 中,您可以在 — 元素中将cookies
属性设置为false
<Context>
元素。另请参阅此 Tomcat 特定文档。这样,会话将不会保留在未重写 URL 的后续请求中——仅当您出于某种原因从请求中获取它时。毕竟,如果你不需要它, 就 不要抓住它,那么它就根本不会被创建/保留。
或者,如果您已经在使用 Java EE 6 / Servlet 3.0 或更新版本,并且真的想通过
web.xml
来实现,那么您可以使用 --- 中的新<cookie-config>
web.xml
如下将最大年龄归零:如果您想在您的网络应用程序中进行硬编码,以便
getSession()
永远不会返回HttpSession
(或“空”HttpSession
),那么您需要创建filter listening on anurl-pattern
of/*
which replaces theHttpServletRequest
with aHttpServletRequestWrapper
implementation which returns on allgetSession()
方法null
,或虚拟自定义HttpSession
什么都不做,甚至抛出UnsupportedOperationException
的实现。如果您不需要它们,就不要使用它们。就这样。真的 :)