【问题标题】:Why set a JSP page session = "false" directive?为什么要设置 JSP 页面 session="false" 指令?
【发布时间】:2011-07-27 19:23:46
【问题描述】:

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

<%@ page session="false" %>

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

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

【问题讨论】:

    标签: jsp session


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

            • 我真的很喜欢学习小的性能技巧,它们可以加起来成为大事。谢谢!
            • 此外,会话可能会在容错设置中写入应用服务器的持久存储,因此指定页面不使用会话(不是特别是不创建会话作为提问者暗示)避免了与持久存储交互的 I/O 开销。
            • 惊人的解释!!
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-02-17
            • 2010-09-13
            • 1970-01-01
            • 2017-09-10
            • 2015-07-10
            • 1970-01-01
            相关资源
            最近更新 更多