開發日誌:返回時出現網頁過期的解決方法

問題出現在一個action提交的頁面,點到其他頁面後,再返回就出現網頁過期

window.history.back() 是javascript的請求,由於session已經超時,使用window.history.back() 返回上一頁就會出現網頁已過期的問題

但看了下web.xml文件,發現session-timeout已經設置好了

<session-timeout>
<session-timeout>60</session-timeout><!-- 單位:分鐘 -->
</session-timeout>

後來在要返回的頁面加入:

<%  
  response.setHeader("Cache-Control", "Public");  
  response.setHeader("Pragma", "no-cache");  
  response.setDateHeader("Expires", 0);   
%>

返回成功


最後找到了問題原因:

如果這個頁面是經過post請求獲得的,那麼從這個頁面點擊到下一個頁,再執行返回操作時,就會提示網頁過期

因爲目標頁面的form爲post提交方式,而且是表單已經提交後的響應頁面,無法找到form中的具體參數,而“報錯”,具體解決辦法有

一、將目標頁面的form的method="post"去掉,或改爲method="get"。

二、在要返回的目標頁面中,添加

<%response.setHeader("cache-control","public"); %>
這裏說下Cache-Control頭域

  Cache-Control指定請求和響應遵循的緩存機制。

       在請求消息或響應消息中設置Cache-Control並不會修改另一個消息處理過程中的緩存處理過程。

       請求時的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,響應消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age。各個消息中的指令含義如下:

  Public指示響應可被任何緩存區緩存
  Private指示對於單個用戶的整個或部分響應消息,不能被共享緩存處理。這允許服務器僅僅描述當用戶的部分響應消息,此響應消息對於其他用戶的請求無效。
  no-cache指示請求或響應消息不能緩存
  no-store用於防止重要的信息被無意的發佈。在請求消息中發送將使得請求和響應消息都不使用緩存。
  max-age指示客戶機可以接收生存期不大於指定時間(以秒爲單位)的響應。
  min-fresh指示客戶機可以接收響應時間小於當前時間加上指定時間的響應。
  max-stale指示客戶機可以接收超出超時期間的響應消息。如果指定max-stale消息的值,那麼客戶機可以接收超出超時期指定值之內的響應消息。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章