问题出现在一个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消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。