gpt4 book ai didi

jsf - Primefaces 文件上传和 session 超时

转载 作者:行者123 更新时间:2023-12-03 18:40:34 25 4
gpt4 key购买 nike

如果上传了几个非常大的文件,是否会发生 session 超时?想象一下,我上传了一个 5 GB 的大文件并设置了一个短 session 超时。流式传输文件期间是否会发生 session 超时?

最佳答案

是的,它可以。 servlet specification没有任何地方禁止在事件请求期间销毁 session 。因此,您将面临 ViewExpiredException 的风险当这样的上传到达 bean.

如果这是您关心的问题,您有多种选择:

  • 让上传表单每隔一段时间异步轮询服务器以保持 session 处于事件状态。您可以在 EL 中使用 #{session.maxInactiveInterval}以秒为单位获取当前超时。
    <p:fileUpload ... />
    <p:poll interval="#{session.maxInactiveInterval - 10}" async="true" />

    10 秒的差异只是为了防止它来得太晚,因为页面本身也可能需要一些时间来加载所有 HTML 并初始化轮询。如有必要,您可以在开始上传时有条件地启动/呈现投票。

  • 让上传的“onstart”事件将 session 超时增加到一定的限制(小时?),让上传的“oncomplete”事件将其放回去。
    <p:fileUpload ... onstart="increaseTimeout()" oncomplete="resetTimeout()" />
    <p:remoteCommand name="increaseTimeout" listener="#{bean.increaseTimeout}" />
    <p:remoteCommand name="resetTimeout" listener="#{bean.resetTimeout}" />

    您可以在 bean 中使用 ExternalContext#setSessionMaxInactiveInterval() 以秒为单位设置所需的 session 超时。

  • 使用 stateless JSF 表格。无论 HTTP session 的行为如何, View 都不会过期。
    <f:view transient="true">
    ...
    </f:view>

    注意:任何与此类 View 相关的 View 范围 bean 的行为都与请求范围的 bean 类似。为避免混淆,如有必要,请替换注释。
  • 关于jsf - Primefaces 文件上传和 session 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32780287/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com