• 转载:asp.net网页防刷新重复提交、防后退解决办法集!


    转载自:http://shf.cnblogs.com/archive/2006/01/20/320773.html

    1、提交后 禁用提交按钮(像CSDN这样)
    2、数据处理成功马上跳转到另外一个页面!
     
    操作后刷新的确是个问题,你可以使用跳转页面、关闭本页面,如果是有参数据条件来控制的,那就应该好做了,可以直接修改window.location的值,把值的参数全部改掉,这样就可以了。我用的方法就是以上的。
     

    document.all("save_"+idx).disabled=true;


    刚才有位兄弟也这么问其实很简单
    在提交的页面也就是数据库处理之前
    if session("jy")=true then
    response.write "错误,正在提交"
    response.end
    end if
    在数据库处理完毕后,释放session("jy")
    session("jy")=false
    即可!


    用SESSION 或者用个麻烦点的方法:

    用window.open 弹出表单输入页面,点提交后关闭该页;

    处理提交的ASP页也是用弹出,即先设定表单的target为"submit_form",点提交时window.open("XXX.asp","submit_form"),然后用JS来提交表单,最后就是window.close();

    对处理提交的ASP页,输入数据到数据库完成后,弹出对话框,“提交成功”什么的,最后也来个window.close();

    因为对于window.open()打开的窗口,用window.close()来关闭时不会弹出提示框,直接就关闭窗口了,这样用户就根本没有机会做重复提交了。

    不知道这样合不合你的意思
     
     
    2、数据处理成功马上跳转到另外一个页面!
    这个方法最简单
     
    转:(原理借用)

    首先,我们可以定义一个session变量用来保存一个表单的提交序列号。这里我定义为“$userLastAction”。然后在表单里加入一个hidden变量,把值设为$userLastAction+1:
    <input type=Hidden name=lastAction value=<? =$userLastAction+1 ?>>
    最后,在处理提交之前判断表单是否已被提交过:
    if($lastAction>$userLastAction and inputIsValid(...)){
    $userLastAction++; // 序列号加1
    // 处理表单数据
    }
    我一直使用这个
    你的后台处理页面,也就是数据接收页面,执行完相关的操作后,使用下面的语句:
    response.write("<script>alert('数据提交成功******');window.location.href='你想要转向的页面的地址';</script>")
    这样随便他返回后怎么刷新,显示的始终是“数据提交成功******”的对话框
     
     
    Top
     
     回复人:arcow(冲星) ( ) 信誉:100 2004-10-24 17:09:40 得分:0
     
     
    ?
    <SCRIPT LANGUAGE="javascript">
    <!--
    function input(ok)
    {
    var M1=ok.ReplyContent.value;
    if (M1==''){
    alert('回复内容不可以为空.');
    return false;
    }
    ok.B1.disabled =true;
    ok.B2.disabled =true;
    return true;
    }
    //-->
    </script>
    <form onsubmit="return input(this)">
    <input type=text name=ReplyContent>
    <input type="submit" value="发出回复" border="0" name="B1">
    <input name="B2" TYPE="reset"value="重 写">
    </form>

    这样就行了,提交后直接转到另一页面
     
     
     
    1、让提交后返回历史记录
    Response.Write"<script>alert('OK!添加成功!');history.back();</script>"
    2、提交后跳转到本页
    response.redirect "index.asp"
     
     Response.Write"<script language=javascript>alert('提交成功!');window.location.href='"&Request.ServerVariables("Http_Referer")&"';</script>"
    ===========================================

    防止网页后退

    我们在进行数据库添加操作的时候,如果允许后退,而正巧有刷新了页面,就会再次执行添加操作,无疑这不是我们需要的,像一般网上很多禁止缓存的代码,有时并不可靠,这时你只要在操作的页面加上<body onbeforeunload="window.location.replace('')">就可以了,在网页的里指定要定向的新页,再点后退,看是不是不会再退到刚才的操作页面了,实际上已经把这个历史给删除了
    ============================
    Response.Buffer=true;
        Response.ExpiresAbsolute=DateTime.Now.AddSeconds(-1);
        Response.Expires=0;
        Response.CacheControl="no-cache";
    ==========


    用session如何防止页面刷新和后退?
     
     
      
     

    那位朋友可以提供失例代码?谢谢。

     
     回复人: duguyila(独孤一狼) ( ) 信誉:28  2003-03-18 12:35:02Z  得分:0 
     
     
    ?
    急!up!

     
    Top
     
     回复人: zyhowe(★☆www.zyhowe.com☆★) ( ) 信誉:95  2003-03-18 12:36:43Z  得分:0 
     
     
    ?
    Sub ExpirePage
      Response.Buffer = True   
      Response.ExpiresAbsolute = Now() - 1   
      Response.Expires = 0   
      Response.CacheControl = "no-cache"
      End Sub

     
    Top
     
     回复人: wangwanfu(wangwanfu) ( ) 信誉:91  2003-03-18 12:39:51Z  得分:0 
     
     
    ?
    up

     
    Top
     
     回复人: julyclyde(ASP版社区之星) ( ) 信誉:144  2003-03-18 13:01:06Z  得分:0 
     
     
    ?
    提供不了
    后退属于客户端的工作,如果读硬盘,session根本管不着

     
    Top
     
     回复人: duguyila(独孤一狼) ( ) 信誉:28  2003-03-18 13:02:56Z  得分:0 
     
     
    ?
    上面的代码放在什么位置?如何调用?
    对不起,我是新手,还请大家多多关照,谢谢。

     
    Top
     
     回复人: jobine(愚人渡) ( ) 信誉:160  2003-03-18 13:07:31Z  得分:0 
     
     
    ?
    <%
    Response.Buffer = True
    Response.ExpiresAbsolute = Now() - 1
    Response.Expires = 0
    Response.CacheControl = "no-cache"
    Response.AddHeader "Pragma", "No-Cache"
    %>
    放在页面头部,用Session不能防止后退刷新。

     
    Top
     
     回复人: duguyila(独孤一狼) ( ) 信誉:28  2003-03-18 13:08:22Z  得分:0 
     
     
    ?
    那刷新这个功能呢?
    能不能实现?

     
    Top
     
     回复人: zxhong(红透半边天) ( ) 信誉:202  2003-03-18 13:27:23Z  得分:0 
     
     
    ?
    防止页面刷新:js中可以屏蔽F5,右键等
                 asp中可以通过数据库校验
    session是不能实现的

     
    Top
     
     回复人: jtmoon(逍遥小贼) ( ) 信誉:234  2003-03-18 14:35:45Z  得分:0 
     
     
    ?
    全面考察“禁用浏览器后退按钮”
    2001-4-12  动网先锋 

    浏览器的后退按钮使得我们能够方便地返回以前访问过的页面,它无疑非常有用。但有时候我们不得不关闭这个功能,以
    防止用户打乱预定的页面访问次序。本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适
    用场合。

    一、概述
       曾经有许多人问起,“怎样才能‘禁用’浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏
    览过的页面?”在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代码。)

       经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法
    都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。由于不存在能够完全禁用后退按钮
    的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端脚本。

     
    Top
     
     回复人: julyclyde(ASP版社区之星) ( ) 信誉:144  2003-03-18 18:36:58Z  得分:0 
     
     
    ?
    上面那么长,只一句有用
    就是:
    我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法

     
     
    关于页面刷新的问题(后退再前进!)
     
     
      
     

    就是我在自己的网页上有“追加”按钮,每加一个函数需要到一个csv文件中进行匹配看她是否存在,如果存在就能正常加入到表格中,否则提示该函数不存在!
    我是用cgi做的,在cgi处理,然后加了一个标签在js中,如果函数不存在,标签就是//表示聘闭掉这条语句,如果存在标签就是空格不影响这个alert语句!
    但是现在在ie显示中有个问题!在这个页面显示正常,但是如果点击后退再前进的话,这个画面直接就弹出alert窗口了!我的js函数触发是在onload()中调用的,就是画面显示就调用!!
    请问如何解决这个问题!!!!?谢谢!

     
     回复人: hrong(黄蓉 被正身封杀中) ( ) 信誉:103  2003-11-24 22:28:02Z  得分:20 
     
     
    ?
    设置页面在客户端不缓存:
    HTML
        <META HTTP-EQUIV="pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
        <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1978 08:21:57 GMT">

     
    Top
     
     回复人: supere(虚心求教) ( ) 信誉:69  2003-11-24 22:49:15Z  得分:20 
     
     
    ?
    你强制页面不被缓存就可以了

    网页不会被缓存

    HTM网页
    <META HTTP-EQUIV="pragma" CONTENT="no-cache">
    <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache,

    must-revalidate">
    <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997

    08:21:57 GMT">
    或者<META HTTP-EQUIV="expires" CONTENT="0">
    ASP网页
      Response.Expires = -1
      Response.ExpiresAbsolute = Now() - 1
      Response.cachecontrol = "no-cache"
    PHP网页
    header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
    header("Cache-Control: no-cache, must-revalidate");
    header("Pragma: no-cache");

     
    Top
     
     回复人: nakusakula(121) ( ) 信誉:100  2003-11-25 02:01:16Z  得分:0 
     
     
    ?
    <META HTTP-EQUIV="pragma" CONTENT="no-cache">
        <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate">
        <META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1978 08:21:57 GMT">
    加入这些就可以么?no-cache这些都是固定调用么?Wed, 26 Feb 1978 08:21:57 GMT这个东西要不要?

     
    Top
     
     回复人: colee(浪漫的惊喜) ( ) 信誉:102  2003-11-25 10:07:30Z  得分:10 
     
     
    ?
    过期时间当然要,还要设置在当前时间之前

     
    Top
     
     回复人: nakusakula(121) ( ) 信誉:100  2003-11-26 11:13:48Z  得分:0 
     
     
    ?
    好的,谢谢大家!!问题基本解决!

     
    Top
     
     
     

    该问题已经结贴 ,得分记录: hrong (20)、 supere (20)、 colee (10)、 
     
     

      如何使网页的后退按钮和刷新按钮失效?
     
     
      
     

    我在一个网页中随机抽取了一部分试题,并且在onload中调用时钟计时。一旦刷新,则时钟倒计时重新开始,并且随机选取的题目换了;如果后退再前进,填写的答案还在,而时钟重新开始。所以我想使网页的后退按钮和刷新按钮失效,如何实现?

     
     回复人: leo1999(绝对在乎你) ( ) 信誉:89  2003-05-28 12:11:27Z  得分:0 
     
     
    ?
    索性不要他们啦。

    用window.open()打开啦。

     
    Top
     
     回复人: duanyuana(想飞) ( ) 信誉:100  2003-05-28 12:13:50Z  得分:0 
     
     
    ?
    帮忙顶,我做了个考试系统,也有这样的问题。

     
    Top
     
     回复人: mustapha(O~U Gain) ( ) 信誉:84  2003-05-28 12:15:00Z  得分:0 
     
     
    ?
    用window.open()有问题啊,首先用程序控制原窗口关掉(windows.close)前会有提示,还有在打开的窗口再用window.open(),则指定窗口大小的窗口无效。

     
    Top
     
     回复人: piaomiao_jxz(黑心鱼) ( ) 信誉:95  2003-06-02 13:11:23Z  得分:0 
     
     
    ?
    你应该弄成当考生一进入系统后,它就随机抽了一份固定的考卷了,不管他刷新多少次,考题都不会变的。
    要想控制别人按后退,本人只想到window.open()。使它没的后退了。

     
    Top
     
     回复人: whcasp(笑看人生) ( ) 信誉:94  2003-06-02 13:18:31Z  得分:0 
     
     
    ?
    buffer=false

     
    Top
     
     回复人: dgsrest() ( ) 信誉:91  2003-06-02 13:24:06Z  得分:0 
     
     
    ?
    禁止页面缓存。具体是使用服务器端脚本,如下所示:   
    <  %   
    Response.Buffer  =  True   
    Response.ExpiresAbsolute  =  Now()  -  1   
    Response.Expires  =  0   
    Response.CacheControl  =  "no-cache"   
    %  >   
     


     
    Top
     
     回复人: piaomiao_jxz(黑心鱼) ( ) 信誉:95  2003-06-30 11:13:47Z  得分:0 
     
     
    ?
    浏览器的后退按钮使得我们能够方便地返回以前访问过的页面,它无疑非常有用。但有时候我们不得不关闭这个功能,以防止用户打乱预定的页面访问次序。本文介绍网络上可找到的各种禁用浏览器后退按钮方案,分析它们各自的优缺点和适用场合。

    一、概述
       曾经有许多人问起,“怎样才能‘禁用’浏览器的后退按钮?”,或者“怎样才能防止用户点击后退按钮返回以前浏览过的页面?”在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 ariables
    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代码。)
       经过一番仔细的寻寻觅觅之后,我发现仍旧无法找出真正能够完全禁用浏览器后退按钮的办法。所有这里介绍的方法都能够在不同程度上、以不同的方式禁止用户返回前一页面,但它们都有各自的局限。由于不存在能够完全禁用后退按钮的方法,所以最好的方案应该是:混合运用客户端脚本和服务器端脚本。
    <html>
    <head>
    <meta http-equiv="Expires" CONTENT="0">
    <meta http-equiv="Cache-Control" CONTENT="no-cache">
    <meta http-equiv="Pragma" CONTENT="no-cache">
    </head>


    <script language="JavaScript">
    <!--
    javascript:window.history.forward(1);
    //-->
    </script>

  • 相关阅读:
    Flink 作为现代数据仓库的统一引擎:Hive 集成生产就绪!
    终于要跟大家见面了,Flink 面试指南
    了解jQuery的$符号
    关于serialVersionUID的说明
    Java类更改常量后编译不生效
    ora-00054资源正忙,但指定以nowait方式
    【Servlet】基于Jsp的微信Oauth2认证
    [Maven]Maven构建可执行的jar包(包含依赖jar包)
    FTP服务FileZilla Server上传提示550 Permission denied
    nginx
  • 原文地址:https://www.cnblogs.com/Koy/p/839479.html
Copyright © 2020-2023  润新知