- 浏览: 787575 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (981)
- javascript (102)
- java (212)
- JQuery (81)
- 幽默笑话 (2)
- 只言片语 (6)
- 开发小记 (283)
- Hibernate (17)
- DWR (4)
- SQL (10)
- spring-ibatis (8)
- linux (24)
- Struts1 (8)
- Struts2 (16)
- spring (42)
- Mybatis (16)
- css (18)
- servlet (8)
- jdbc (4)
- jsp (1)
- spring-jdbc (2)
- FreeMarker (2)
- MySQL (24)
- JQuery-Grid (7)
- jstl (5)
- 正则表达式 (1)
- 面试集锦 (86)
- unix (18)
- 开发工具 (23)
- ajax (5)
- webservice (4)
- log4j (3)
- oracle (15)
- extjs (14)
- 其他 (9)
- 优秀技术参考地址 (1)
- 性能 (3)
- 数据库 (25)
- 算法 (15)
- 设计模式 (10)
- Python (3)
- AIX (5)
- weblogic (1)
- shell (14)
- quartz (5)
- 图形文件FusionCharts (1)
- Websphere (4)
- 转载 (5)
- hadoop (1)
- highchart (24)
- perl (22)
- DB2 (7)
- JBoss (1)
- JQuery Easy UI (9)
- SpringMVC (5)
- ant (5)
- echart (9)
- log4J配置 (3)
- 多线程 (10)
- 系统架构 (7)
- nginx (3)
- loadrunner1 (1)
- 分布式 (1)
- Dubbo (1)
- Redis (2)
- JMS (4)
- 自动化测试 (3)
- Spring循环依赖的三种方式 (1)
- spring-boot (2)
- 高级测试 (9)
- github (2)
- sonar (1)
- docker (6)
- web前端性能优化 (1)
- spring-aop (6)
- rabbit (1)
- ELK (1)
- maven (1)
- minio (1)
最新评论
-
zengshaotao:
jstl1point0 写道很好啊,如果有带Session会话 ...
Nginx+Tomcat搭建高性能负载均衡集群 -
jstl1point0:
很好啊,如果有带Session会话的怎么搞呢
Nginx+Tomcat搭建高性能负载均衡集群
本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适
用场合。
一、概述
曾经有许多人问起,“怎样才能‘禁用'浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏
览过的页面?”在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代码。)
经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法
都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。由于不存在能够完全禁用后退按钮
的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端脚本
用场合。
一、概述
曾经有许多人问起,“怎样才能‘禁用'浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏
览过的页面?”在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代码。)
经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法
都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。由于不存在能够完全禁用后退按钮
的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端脚本
发表评论
-
javascript与日期的相关操作
2018-01-08 17:02 335Js获取当前日期时间及其它操作 var myDate ... -
面向对象
2017-08-24 17:31 478var objPro = { name:"zst ... -
两次encodeURI和URLDecode的原理分析
2017-08-24 12:15 4047当使用地址栏提交查询参数时,如果不编码,非英文字符会按照操 ... -
encodeURI
2017-08-14 21:29 525对于ajax请求,经常会在地址栏传入一些参数,涉及的中文的, ... -
encodeURL
2017-05-04 18:10 538.encodeURL函数主要是来对URI来做转码,它默认是采 ... -
cookie操作 JQuery
2017-03-23 22:18 519首先包含jQuery的库文件,在后面包含 jquery.coo ... -
表单参数一并提交
2017-03-23 13:09 565对于一般的table数据,并且还带有查询条件,我们都会使用j ... -
功能参考
2016-09-12 17:48 463<%@ page language="jav ... -
树形节点设权重,叶子节点设权重
2016-08-19 12:01 1122<%@ page language="jav ... -
除去缓存
2016-08-11 17:04 378IE的showModalDialog方法,缓存很是头疼 ... -
event.srcElement
2016-07-22 16:51 518因为页面的显示内容需要动态生成,所以难免有一些字符串的拼接, ... -
三重循环部分
2016-07-01 11:44 489一串json数据data,格式形如: {{WDNAME:A ... -
base href, new Highchart.Chart()
2016-05-27 17:35 572<% String path = request.g ... -
鼠标点击的位置,滚动条,兼容
2016-05-19 15:58 624j经常要计算鼠标当前点击的位置,并且页面经常发生了滚动。这个 ... -
表单提交页面不跳转
2016-04-05 19:38 975页面发生表单不跳转,我们可以ajax的形式 当然,有 ... -
HTML图片热区map area的用法
2016-01-04 14:56 547HTML图片热区map area的用法 <a ... -
获取页面高度
2015-12-15 10:26 456$(document).height() //是获取整个页 ... -
iframe中子父窗口互调的js方法
2015-11-12 18:12 934一、父窗口调用iframe子窗口方法 1、HTML语法:&l ... -
数组去重
2015-10-30 08:38 532//将一个含有相同值的数组去重 function getD ... -
dtree树构建
2015-09-15 15:19 464dTree 主页:http://destroydrop.co ...
相关推荐
总之,清除网页历史记录和屏蔽后退按钮是一项复杂而微妙的任务,需要综合考虑用户交互、安全性以及性能。开发者需要灵活运用各种技术手段,结合服务器端和客户端的控制,以实现既安全又用户友好的网页设计。
网页历史记录是浏览器为了方便用户回溯访问过的页面而保存的一种数据。当你浏览网页时,浏览器会自动记录你访问过的网址,以便你在需要时能够快速返回。然而,这些历史记录可能会泄露你的个人信息或隐私,因此有时...
标题中的“清除IE历史记录的小工具”指的是一个用于清理Internet Explorer(简称IE)浏览器浏览历史的软件或程序。IE是微软公司开发的一款广泛使用的网页浏览器,它在用户浏览网页时会自动保存用户的浏览记录,包括...
对于使用VC(Visual C++)进行开发的项目而言,实现历史记录的全面清除不仅是对用户数据管理的一种必要手段,也是确保应用稳定性和安全性的重要步骤。本文将深入探讨在VC环境中如何实现历史记录的全面清除,包括...
1. 添加清除按钮:在搜索界面添加一个清除历史记录的按钮,或者将清除功能集成到搜索框的右上角菜单中。 2. 实现清除逻辑:当用户点击清除按钮时,执行SQL删除语句,从数据库中移除所有历史记录。同时,更新显示...
本篇将详细介绍如何清除文本框上次输入值的历史记录,主要涉及Web应用和桌面应用两种场景。 1. Web应用中的清除策略 对于基于HTML的Web应用,文本框的历史记录通常与浏览器的自动填充功能有关。开发者可以通过以下...
一个简单的 清除运行历史记录的BAT文件
【标题】"VC源码:清空PC历史记录"指的是使用Microsoft Visual C++(简称VC)编程语言编写的源代码,旨在清除计算机上的历史记录,包括但不限于浏览历史、搜索历史、下载历史等。这一功能在保护用户隐私和优化系统...
### 自动清除打开文档的历史记录 在日常使用计算机的过程中,我们常常会留下各种操作痕迹,比如打开过的文档、访问过的网站等。这些历史记录虽然在一定程度上为用户提供了便利,但同时也存在一定的隐私泄露风险。...
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. **回溯操作**:用户可以查看并重新执行历史记录中的某个计算。这就需要在处理历史记录时,不仅保存操作的文本表示,还...
用于powershell 历史记录命令,按上下切换的历史记录可以清除
**彻底清除IE历史记录的方法** 在互联网的使用过程中,为了保护个人隐私或避免敏感信息泄露,有时我们需要彻底清除浏览器的历史记录。对于使用IE浏览器的用户,常规的清除方式可能并不能完全删除所有痕迹。本文将...
远程桌面连接历史记录清除脚本:直接双击执行脚本,可以把远程连接历史记录清除; 备注:脚本里面的用户名针对当前用户,请注意更改!
### 如何在微软Edge浏览器中清除浏览历史记录 随着互联网技术的发展与普及,浏览器成为我们日常生活中不可或缺的一部分。为了保护个人隐私以及优化浏览器性能,定期清理浏览器的历史记录变得尤为重要。本文将详细...