jsp设置页面过期
服务端方法:
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", -10);
%>
在登陆页面和登陆后页面均加入这段代码即可
注意,一定要在登陆页面(或类似功能的页面使session无效)
客户端方法:
meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的<head>与</head>中,meta 标签的用处很多。meta 的属性有两种:name和http-equiv。name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类(目前几乎所有的搜索引擎都使用网上机器人自动查找meta值来给网页分类)。这其中最重要的是description(站点在搜索引擎上的描述)和keywords(分类关键词),所以应该给每页加一个meta值。比较常用的有以下几个:
name 属性
1、<meta name="Generator" contect="">用以说明生成工具(如Microsoft FrontPage 4.0)等;
2、<meta name="KEYWords" contect="">向搜索引擎说明你的网页的关键词;
3、<meta name="DEscription" contect="">告诉搜索引擎你的站点的主要内容;
4、<meta name="Author" contect="你的姓名">告诉搜索引擎你的站点的制作的作者;
5、<meta name="Robots" contect=
"all|none|index|noindex|follow|nofollow">
其中的属性说明如下:
设定为all:文件将被检索,且页面上的链接可以被查询;
设定为none:文件将不被检索,且页面上的链接不可以被查询;
设定为index:文件将被检索;
设定为follow:页面上的链接可以被查询;
设定为noindex:文件将不被检索,但页面上的链接可以被查询;
设定为nofollow:文件将不被检索,页面上的链接可以被查询。
http-equiv属性
1、<meta http-equiv="Content-Type" contect="text/html";charset=gb_2312-80">
和 <meta http-equiv="Content-Language" contect="zh-CN">用以说明主页制作所使用的文字以及语言;
又如英文是ISO-8859-1字符集,还有BIG5、utf-8、shift-Jis、Euc、Koi8-2等字符集;
2、<meta http-equiv="Refresh" contect="n;url=http://yourlink">定时让网页在指定的时间n内,跳转到页面http;//yourlink;
3、<meta http-equiv="Expires" contect="Mon,12 May 2001 00:20:00 GMT">可以用于设定网页的到期时间,一旦过期则必须到服务器上重新调用。需要注意的是必须使用GMT时间格式;
4、<meta http-equiv="Pragma" contect="no-cache">是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;
5、<meta http-equiv="set-cookie" contect="Mon,12 May 2001 00:20:00 GMT">cookie设定,如果网页过期,存盘的cookie将被删除。需要注意的也是必须使用GMT时间格式;
6、<meta http-equiv="Pics-label" contect="">网页等级评定,在IE的internet选项中有一项内容设置,可以防止浏览一些受限制的网站,而网站的限制级别就是通过meta属性来设置的;
7、<meta http-equiv="windows-Target" contect="_top">强制页面在当前窗口中以独立页面显示,可以防止自己的网页被别人当作一个frame页调用;
8、<meta http-equiv="Page-Enter" contect="revealTrans(duration=10,transtion=
50)">和<meta http-equiv="Page-Exit"
contect="revealTrans(duration=20,transtion
=6)">设定进入和离开页面时的特殊效果,这个功能即FrontPage中的“格式/网页过渡”,不过所加的页面不能够是一个frame页面。
上面是从网上弄到的信息。
我使用的开发工具是MyEclipse,当我创建一个Jsp页面时,MyEclipse就会为我自动创建一个模版,如:
1.MyJsp.jsp:
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<body>
</body>
2.MyJsp1.jsp:
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
3.struts-config.xml:
<form-beans>
</form-beans>
<forward name="toMyJsp1" path="/MyJsp1.jsp"></forward>
<action-mappings>
</action-mappings>
4.UserForm:
package com.andy.struts.form;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
public class UserForm extends ActionForm {
}
5.UserAction:
return arg0.findForward("toMyJsp1");
当我在浏览器窗口上输入http://localhost:8086/WebRoot/MyJsp.jsp后,并在文本框中输入andy,单击[提交]按钮,结果正确显示username:andy,但我单击浏览器窗口上的[后退]按钮时,可以回到MyJsp.jsp页面,并且在文本框中显示andy.这是为什么呢?在MyJsp.jsp和MyJsp1.jsp页面中不是在<meta/>中设置了expires、pragma和cache-control吗?就算把expires设置为-1,也是一样的.至于为什么出现疑问,是因为我的个人理解是此时这样的设置不是代表着页面失效吗,既然这样,当我单击[后退]按钮时,应该有所提示的才对.而且我还发现如果在提交到MyJsp1.jsp页面后,在单击[后退]按钮之前,我改变了MyJsp.jsp的内容并保存,之后,我再在浏览器上单击[后退]按钮,结果发现此时的MyJsp.jsp页面并不自动更新,而是显示提交那时刻的内容.只有在我按下浏览器窗口上的[刷新]按钮后才显示更新的内容.这个也说明了,当我单击[后退]按钮时,浏览器有可能是从缓冲中提取数据的,而不是到服务器提取数据.那么先前设置expires、pragma和cache-control不是没有任何作用?(个人感觉).
此后,我通过网上搜索到一些关于如何使[后退]按钮时效的方法,其中有:
一、
<script language='javascript'>
history.go(1);
</script>
我理解上面代码的意思,但使用起来会怎么样呢?让我们试一下,首先我在MyJsp.jsp文件中添加了上面的这段代码,然后打开浏览器输入地址,并显示MyJsp.jsp页面的内容.接着我在文本框中输入andy,并提交,显示username:andy,然后我按下浏览器上的[后退]按钮,发现不能回到之前的MyJsp.jsp页面.看来这个方法不错.(但如果是使用location.replace(sURL),我想[后退]按钮应该是灰色的,即不可用).
二、
第二中方法使用的就是上面说的服务端方法和客户端方法,但上面已经说了客户端已经不可用,那么服务器端会怎么样呢?首先我把先前的更改还原到初始状态,即去掉先前的script脚本代码,然后添加如下代码:
<%
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", -10);
%>
重新打开浏览器,在窗口中输入地址,在显示的文本框中输入andy并提交,显示username:andy,此时按下浏览器窗口上的[后退]按钮,发现可以回到原来的MyJsp.jsp页面,而上面所说的登录页面和登录后页面都需加,其实我在MyJsp.jsp和MyJsp1.jsp两个都加了,结果还是一样,一样都可以后退到原来的MyJsp.jsp页面.两者还是有点区别的:
即当我只在MyJsp.jsp页面添加代码时,不但可以按下[后退]按钮回到MyJsp.jsp页面,并且此时文本框竟不显示任何内容(惊奇!注意咯),而且回到MyJsp.jsp页面后也可以按下[前进]按钮,回到MyJsp1.jsp页面,并且此时的MyJsp1.jsp页面的内容跟上次[提交]后显示的一样(就算是按下[前进]前修改了MyJsp1.jsp或是在MyJsp.jsp页面的文本框中输入内容,按下[前进]后也不会显示更新的内容).
但如果MyJsp.jsp和MyJsp1.jsp页面都添加的话,有一步是不一样的,即我[后退]到原来的MyJsp.jsp页面后,按下[前进]时,竟显示如下内容:
警告: 网页已经过期您申请的网页是用表单中提交的信息创建的。该网页已失效。由于有安全预警功能,Internet Explorer 不会自动再次提交您的信息。
要重新提交信息并查看该网页,请单击刷新按钮。
单击一下[刷新]按钮后,发现弹出一个对话框,显示警告信息,如下:
!不重新发送信息,则无法刷新页面,请单击"重试"再次发送信息,或单击"取消"返回正查看的页.
单击[重试],结果为:username:andy
后来,我在网上发现有人也有跟我一样的困惑,如:
aspire-tech [普通用户]
请教一下,jsp里面当按IE返回时设置页面过期的问题。
我在jsp文件前面加上了下面的:
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>
另外在<head>头里面加上了:
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">
但是按IE返回的时候页面没有提示过期,奇怪的是再按IE前进提示过期。
请大虾指教!
maxtiger [普通用户]
<meta http-equiv="expires" content="wed, 26 Feb 1997 08:21:57 GMT">
kidman [普通用户]
如果你前进的那页有提交动作的话,应该是会提示过期的~~~
funove007 [普通用户]
问:我有一个关于 HTML 页截止日期的问题(Windows? XP 和 Microsoft Internet Explorer 6.x)。在 Expire1.htm 中,我指定了页立即过期:
<html>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="expires" CONTENT="-1">
</head><body>
<a href="HtmlPage1.htm">HtmlPage1.htm</a>
</body>
</html>
使用 Internet Explorer 时,如果我浏览到 Expire1.htm(使用 HTTP,不是 HTTPS),则当我单击链接之后,会被带入 HtmlPage1.htm。如果我更改 Expire1.htm 的内容,然后单击“Back”按钮,得到的是 Expire1.htm 的旧内容,而不是新内容。在 Internet Explorer 中,我选择了在每次访问该页时都“检查”存储页的更新版本的选项。
答:此行为是设计使然。通过使用 META 标头,您可以依赖于 MSHTML 来判断是否删除缓存中的内容,缓存中内容的删除只由 MSHTML 在这些内容通过安全套接字层 (SSL) 下载时执行。因为您使用“Forward”和“Back”按钮,所以不是真正的导航;您只是在显示前面下载的内容。如果连接不是一个 SSL 连接,MSHTML 则只是为存储在缓存中的内容设置 Expiration 标头。
这些操作取决于 WININET 在下载时是否缓存了文件,您通过在整个网站上设置标头已经发现了这个情况。如果您控制 IIS 服务器或宿主这些 HTML 文件的 Web 服务器,则可以基于站点、目录或文件设置 Expires 标头,因此可以一直向下到文件级别,获得合适的缓存行为。
从 Expire1.htm 导航到 HtmlPage1.htm 之后,但在单击“Forward”和“Back”按钮之前,您需要查看“Tools | Internet options | Settings button | View Files”按钮。在此显示中,找到 Expires1.htm,然后查看“截止期”列。是否存在一个日期/时间反映您何时访问了该文件?如果是,图 2 中显示的规则会在使用“Forward”和“Back”按钮时应用到这些经过缓存的内容。您可能会看到,使用“Forward”和“Back”按钮时,只有当前 Internet Explorer 会话期间尚未下载内容的情况下才会发生同步。
现在为了获得您希望的行为,在加载了 HtmlPage1.htm 之后,请不要使用“Forward”和“Back”按钮来访问 Expire1.htm,而是单击地址栏,然后手动输入 Expire1.htm 的完整路径。这样应该会导致显示新内容,因为现在缓存规则是基于超链接单击或地址栏导航的。这种情况下,内容的“截止期”将决定是否应该再次下载该内容。
我看了上面funove007用户的内容后,按照[Tools | Internet options | Settings button | View Files]步骤看到此时临时文件里面只有一个后缀为.jsp的文件,即MyJsp.jsp,而MyJsp1.jsp没有看到,而且[截止期]为[无].(不管是只有MyJsp.jsp添加了还是两个文件都添加,其情况是一样的).
后来两个文件都不添加了,可在临时文件下看到的情况还是一样的,即[截止期]为[无].
上面有个maxtiger用户提到的方法是使用<meta http-equiv="expires" content="wed, 26 Feb 1997 08:21:57 GMT">,我也不知道行不行,决定试一下,现把之前在两个文件中添加的代码去掉,然后把<meta http-equiv="expires" content="0">改为<meta http-equiv="expires" content="wed, 26 Feb 1997 08:21:57 GMT">,打开浏览器,在窗口中输入地址,并在文本框中输入andy,提交,正确显示后,发现按下[后退]和[前进]都可行.难道需要添加
<%
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
%>
试一下,接着我在MyJsp.jsp页面中添加这段代码,发现还是可以[后退]和[前进]..
看来,到目前为止,只有第一种方法可行,而第二种方法不可行的真正原因在哪,我也不清楚,希望以后可以得到解决.