我知道它会阻止会话对象的创建,但是你什么时候需要这样做呢?当 JSP 不需要访问隐式会话时,它是否被认为是最佳实践?注意:我之所以问,是因为它是在这个 Spring MVC 教程中,我假设 springsource 的人知道他们的东西 - http://blog.springsour......" /> 我知道它会阻止会话对象的创建,但是你什么时候需要这样做呢?当 JSP 不需要访问隐式会话时,它是否被认为是最佳实践?注意:我之所以问,是因为它是在这个 Spring MVC 教程中,我假设 springsource 的人知道他们的东西 - http://blog.springsour......"> 我知道它会阻止会话对象的创建,但是你什么时候需要这样做呢?当 JSP 不需要访问隐式会话时,它是否被认为是最佳实践?注意:我之所以问,是因为它是在这个 Spring MVC 教程中,我假设 springsource 的人知道他们的东西 - http://blog.springsour......" />
ChatGPT解决这个技术问题 Extra ChatGPT

为什么要设置 JSP 页面 session="false" 指令?

我想知道您何时想要在 JSP 中设置以下页面指令:

<%@ page session="false" %>

我知道它会阻止会话对象的创建,但是你什么时候需要这样做呢?当 JSP 不需要访问隐式会话时,它是否被认为是最佳实践?

注意我之所以问,是因为它是在这个 Spring MVC 教程中,我假设 springsource 的人知道他们的东西 - http://blog.springsource.com/2011/01/04/green-beans-getting-started-with-spring-mvc/


n
no.good.at.coding

原因之一是性能内存。如果您有一个不需要参与会话的页面(例如,about.jspfaq.jsp),那么让每个 JSP 参与会话的默认行为将产生创建新会话对象的开销(如果尚不存在)并随着更多对象驻留在堆上而增加内存使用量。

如果单个页面看到来自许多唯一用户的高流量以及高跳出率,则这种效果将被大大夸大,即他们的用户不会继续浏览,而是在查看该页面后立即离开站点 - 容器将创建一个新的每个用户的会话对象永远不会被再次使用,并且在超时后最终将被垃圾收集 - 添加在对象创建、内存使用和垃圾收集的头上,而不会给您任何真正的价值。


我真的很喜欢学习小的性能技巧,它们可以加起来很重要。谢谢!
此外,会话可以在容错设置中写入应用程序服务器的持久存储,因此指定页面不使用会话(不是特别是像提问者暗示的那样不创建会话)避免了 I/O与持久存储交互的开销。
惊人的解释!
i
informatik01

此设置也是一种安全措施,因为它还可以避免潜在的 DoS 攻击。考虑一个简单的脚本,它迭代地wgets JSP:它将在几秒钟内生成大量会话。


R
Reimius

实际上,我的应用程序中有一个真实的场景供其使用。我们让 Squid 在我们的应用程序前充当反向代理。 squid 服务器设置为轮询托管我们应用程序的所有 tomcat 实例,以验证服务器是否启动并运行,如果它们不是,Squid 将故障转移到使用我们集群中的另一台服务器。

Squid 对我们应用程序的实际轮询设置为轮询应用程序中的特定页面。由于 Squid 的轮询实际上不是浏览器,它不能保持会话,这意味着对服务器页面的每次轮询都会让 tomcat 创建一个 Squid 无法保持引用的会话。我们添加了 <%@ page session="false" %> 指令,以便不会在每次投票时创建会话。如果我们不使用此指令,我们将在 4 小时内无缘无故地创建数千个会话。


H
Hein Blöd

另一个实际需要添加此指令的用例是在 .ini 配置文件中使用 Apache Shiro 的 noSessionCreation 过滤器时,例如因为您的身份验证方案是无状态的。如果缺少它,您将遇到 org.apache.shiro.subject.support.DisabledSessionException


a
austinbruch

在我的生产应用程序中遇到另一个用例,我想我会在这里分享它以防它帮助某人。

我们有一个通过会话保护大多数资源的 Web UI 应用程序。但是,在我们的生产部署中,一些资源受到位于我们应用程序前面的部分 Web 层的保护。因此,就应用程序而言,这些资源是完全不受保护的。其中一些“不受保护”的资源是 JSP。

如果用户在我们的受保护资源之一上建立会话,然后从浏览器对“未受保护”资源之一进行 XHR 调用,我们遇到了一个问题,即容器声称匿名用户正在尝试访问用户 foo 的会话,从而停止执行。将“不受保护的”JSP 配置为不使用会话让我们解决了这个问题。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅