本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适
用场合。
一、概述
曾经有许多人问起,“怎样才能‘禁用'浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏
览过的页面?”在ASP论坛上,这个问题也是问得最多的问题之一。遗憾的是,答案非常简单:我们无法禁用浏览器的后退
按钮。
起先我对于居然有人想要禁用浏览器的后退按钮感到不可思议。后来,看到竟然有那么多的人想要禁用这个后退按
钮,我也就释然(想要禁用的只有后退按钮,不包括浏览器的前进按钮)。因为在默认情况下,用户提交表单之后可以通
过后退按钮返回表单页面(而不是使用“编辑”按钮!),然后再次编辑并提交表单向数据库插入新的记录。这是我们不
愿看到的。
因此我就决定要找出避免出现这种情况的方法。我访问了许多网站,参考了这些网站所介绍的各种实现方法。如果你
经常访问ASP编程网站,本文所介绍的部分内容你可能已经见到过。本文的任务是把各种可能的方法都介绍给大家,然后找
出最好的方法!
二、禁止缓存
在我找到的许多方案中,其中有一种建议禁止页面缓存。具体是使用服务器端脚本,如下所示:
<%
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
%>
这种方法非常有效!它强制浏览器重新访问服务器下载页面,而不是从缓存读取页面。使用这种方法时,编程者的主
要任务是创建一个会话级的变量,通过这个变量确定用户是否仍旧可以查看那个不适合通过后退按钮访问的页面。由于浏
览器不再缓存这个页面,当用户点击后退按钮时浏览器将重新下载该页面,此时程序就可以检查那个会话变量,看看是否
应该允许用户打开这个页面。
例如,假设我们有如下表单:
<%
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
If Len(Session("FirstTimeToPage")) > 0 then
&single; 用户已经访问过当前页面,现在是再次返回访问。
&single; 清除会话变量,将用户重定向到登录页面。
Session("FirstTimeToPage") = ""
Response.Redirect "/Bar.asp"
Response.End
End If
&single; 如果程序运行到这里,说明用户能够查看当前页面
&single; 以下开始创建表单
%>
<form method=post action="SomePage.asp">
<input type=submit>
</form>
我们借助会话变量FirstTimeToPage检查用户是否是第一次访问当前页面。如果不是第一次(即Session
("FirstTimeToPage")包含某个值),那么我们就清除会话变量的值,然后把用户重新定向到一个开始页面。这样,当表单
提交时(此时SompePage.asp被打开),我们必须赋予FirstTimeToPage一个值。即,在SomePage.asp中我们需要加上下面
的代码:
Session("FirstTimeToPage") = "NO"
这样,已经打开SomePage.asp的用户如果点击后退按钮,浏览器将重新请求服务器下载页面,服务器检查到Session
("FirstTimeToPage")包含了一个值,于是就清除Session("FirstTimeToPage"),并把用户重定向到其他页面。当然,所有
这一切都需要用户启用了Cookie,否则会话变量将是无效的。(有关该问题的更多说明,请参见For session variables
to work, must the Web visitor have cookies enabled?)
另外,我们也可以用客户端代码使浏览器不再缓存Web页面:
<html>
<head>
<meta http-equiv="Expires" CONTENT="0">
<meta http-equiv="Cache-Control" CONTENT="no-cache">
<meta http-equiv="Pragma" CONTENT="no-cache">
</head>
如果使用上面的方法强制浏览器不再缓存Web页面,必须注意以下几点:
只有在使用安全连接时“Pragma: no-cache”才防止浏览器缓存页面。对于不受安全保护的页面,“Pragma: no-cache”
被视为与“Expires: -1”相同,此时浏览器仍旧缓存页面,但把页面标记为立即过期。
在IE 4或5中,“Cache-Control”META HTTP-EQUIV标记将被忽略,不起作用。
在实际应用中我们可以加上所有这些代码。然而,由于这种方法不能适用于所有的浏览器,所以是不推荐使用的。但
如果是在Intranet环境下,管理员可以控制用户使用哪种浏览器,我想还是有人会使用这种方法。
三、其他方法
接下来我们要讨论的方法以后退按钮本身为中心,而不是浏览器缓存。这儿有一篇文章Rewiring the Back Button很
值得参考。不过我注意到,如果使用这种方法,虽然用户点击一下后退按钮时他不会看到以前输入数据的页面,但只要点
击两次就可以,这可不是我们希望的效果,因为很多时候,固执的用户总是能够找到绕过预防措施的办法。
另外一种禁用后退按钮的办法是用客户端JavaScript打开一个没有工具条的窗口,这使得用户很难返回前一页面,但
不是不可能。一种更安全但相当恼人的方法是,当表单提交时打开一个新的窗口,与此同时关闭表单所在的窗口。但我觉
得这种方法不值得认真考虑,因为我们总不能让用户每提交一个表单就打开一个新窗口。
那么,在那个我们不想让用户返回的页面是否也可以加入JavaScript代码呢?在这个页面中加入的JavaScript代码可
用来产生点击前进按钮的效果,这样也就抵消了用户点击后退按钮所产生的动作。用于实现该功能的JavaScript代码如下
所示:
<script language="JavaScript">
<!--
javascript:window.history.forward(1);
//-->
</script>
同样地,这种方法虽然有效,但距离“最好的方法”还差得很远。后来我又看到有人建议用location.replace从一个
页面转到另一个页面。这种方法的原理是,用新页面的URL替换当前的历史纪录,这样浏览历史记录中就只有一个页面,后
退按钮永远不会变为可用。我想这可能正是许多人所寻求的方法,但这种方法仍旧不是任何情况下的最好方法。使用这种
方法的实例如下所示:
<A HREF="PageName.htm" onclick="javascript:location.replace(this.href);
event.returnValue=false; ">
禁止后退到本页面的链接</A>
试试下面这个链接:
禁止后退到本页面的链接!
这种方法的缺点在于:简单地运用Response.Redirect将不再有效,这是因为每次用户从一个页面转到另一个页面,
我们都必须用客户端代码清除location.history。另外还要注意,这种方法清除的是最后一个访问历史记录,而不是全部
的访问记录。
点击上面的链接,你将打开一个简单的HTML页面。再点击后退按钮,你可以看到这时打开的不是本页面,而是本页面
之前的页面!(当然,你必须在浏览器中启用了客户端JavaScript代码。)
经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法
都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。由于不存在能够完全禁用后退按钮
的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端脚本。
分享到:
相关推荐
网页历史记录是浏览器为了方便用户回溯访问过的页面而保存的一种数据。当你浏览网页时,浏览器会自动记录你访问过的网址,以便你在需要时能够快速返回。然而,这些历史记录可能会泄露你的个人信息或隐私,因此有时...
标题中的“清除IE历史记录的小工具”指的是一个用于清理Internet Explorer(简称IE)浏览器浏览历史的软件或程序。IE是微软公司开发的一款广泛使用的网页浏览器,它在用户浏览网页时会自动保存用户的浏览记录,包括...
对于使用VC(Visual C++)进行开发的项目而言,实现历史记录的全面清除不仅是对用户数据管理的一种必要手段,也是确保应用稳定性和安全性的重要步骤。本文将深入探讨在VC环境中如何实现历史记录的全面清除,包括...
1. 添加清除按钮:在搜索界面添加一个清除历史记录的按钮,或者将清除功能集成到搜索框的右上角菜单中。 2. 实现清除逻辑:当用户点击清除按钮时,执行SQL删除语句,从数据库中移除所有历史记录。同时,更新显示...
本篇将详细介绍如何清除文本框上次输入值的历史记录,主要涉及Web应用和桌面应用两种场景。 1. Web应用中的清除策略 对于基于HTML的Web应用,文本框的历史记录通常与浏览器的自动填充功能有关。开发者可以通过以下...
【标题】"VC源码:清空PC历史记录"指的是使用Microsoft Visual C++(简称VC)编程语言编写的源代码,旨在清除计算机上的历史记录,包括但不限于浏览历史、搜索历史、下载历史等。这一功能在保护用户隐私和优化系统...
### 自动清除打开文档的历史记录 在日常使用计算机的过程中,我们常常会留下各种操作痕迹,比如打开过的文档、访问过的网站等。这些历史记录虽然在一定程度上为用户提供了便利,但同时也存在一定的隐私泄露风险。...
一个简单的 清除运行历史记录的BAT文件
5. **管理历史记录**:为了防止历史记录过多,可以设置保存的历史条目上限,或者提供清除历史记录的功能。 6. **优化用户体验**:考虑添加诸如搜索关键词高亮、按时间排序历史记录、搜索历史过滤等功能,以进一步...
本文将详细介绍如何有效地清除Visual Studio 2010的历史记录,以优化您的开发体验。 **一、什么是Visual Studio历史记录?** Visual Studio的历史记录功能允许开发者快速访问最近打开过的项目和解决方案。每当您...
在网页设计和开发中,有时出于安全或用户体验的考虑,我们可能会希望禁用浏览器的后退按钮,防止用户通过点击后退按钮返回到之前的敏感页面。这篇文章主要探讨了几种禁用浏览器后退按钮的方法,虽然这并不是标准的...
使用`window.onpopstate`事件,我们可以监听用户通过浏览器后退或前进按钮触发的历史状态变化。当用户在历史记录中导航时,该事件会被触发,其事件对象`event.state`可以返回之前存储的JSON数据。 6. **...
9.如何清除上次登录用户历史记录?(Visual C++编程 源代码)9.如何清除上次登录用户历史记录?(Visual C++编程 源代码)9.如何清除上次登录用户历史记录?(Visual C++编程 源代码)9.如何清除上次登录用户历史...
开发者可能使用`JTextArea`或者自定义组件来展示,同时提供滚动查看和清除历史记录的功能。 3. **回溯操作**:用户可以查看并重新执行历史记录中的某个计算。这就需要在处理历史记录时,不仅保存操作的文本表示,还...
用来删除记事本历史记录的批处理文件.来源文件里面有.
1. 删除VB项目文件:.vbp(工程文件)和.vbw(工作区文件)包含历史记录信息,删除它们可以消除特定项目的记录。 2. 清理注册表:VB的历史记录也存储在Windows注册表中。HKEY_CURRENT_USER\Software\Microsoft\...
远程桌面连接历史记录清除脚本:直接双击执行脚本,可以把远程连接历史记录清除; 备注:脚本里面的用户名针对当前用户,请注意更改!
用于powershell 历史记录命令,按上下切换的历史记录可以清除
但是,需要注意的是,这需要在每次页面跳转时都手动用客户端代码清除`location.history`,否则如果后退历史记录未被清除,后退按钮依然可以使用。 3. 处理键盘事件来禁用后退键(Backspace) 可以通过JavaScript...