簡體   English   中英

Primefaces fileUpload和session timout

[英]Primefaces fileUpload and session timout

如果上傳了幾個非常大的文件,會發生會話超時嗎? 想象一下,我上傳了一個5 GByte的大文件,並設置了短會話超時。 流式傳輸文件時會發生會話超時嗎?

是的,它可以。 servlet規范無處可以禁止在活動請求期間銷毀會話。 因此,當這樣的上載到達bean時,您將冒着ViewExpiredException風險。

如果這是您關注的問題,您有以下幾種選擇:

  1. 讓上傳表單間隔地異步輪詢到服務器以使會話保持活動狀態。 您可以在EL中使用#{session.maxInactiveInterval}以秒為單位獲取當前超時。

     <p:fileUpload ... /> <p:poll interval="#{session.maxInactiveInterval - 10}" async="true" /> 

    10秒的差異只是為了防止它太遲到達幾秒鍾,因為頁面本身也可能需要一些時間來加載所有HTML並初始化輪詢。 如有必要,您可以在開始上傳時有條件地啟動/呈現輪詢。


  2. 讓上傳的“onstart”事件將會話超時增加到某個限制(小時?),並讓上傳的“oncomplete”事件將其恢復。

     <p:fileUpload ... onstart="increaseTimeout()" oncomplete="resetTimeout()" /> <p:remoteCommand name="increaseTimeout" listener="#{bean.increaseTimeout}" /> <p:remoteCommand name="resetTimeout" listener="#{bean.resetTimeout}" /> 

    您可以在bean中使用ExternalContext#setSessionMaxInactiveInterval()以秒為單位設置所需的會話超時。


  3. 使用無狀態 JSF表單。 無論HTTP會話的行為如何,視圖都將永不過期。

     <f:view transient="true"> ... </f:view> 

    注意:綁定到此類視圖的任何視圖范圍bean都將表現為請求范圍的bean。 為避免混淆,請在必要時替換注釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM