仓酷云
标题:
ASP网页设计考查禁用扫瞄器前进按钮
[打印本页]
作者:
山那边是海
时间:
2015-1-16 22:16
标题:
ASP网页设计考查禁用扫瞄器前进按钮
ActiveServerPage技术为应用开发商提供了基于脚本的直观、快速、高效的应用开发手段,极大地提高了开发的效果。在讨论ASP的安全性问题之前,让我们来看看ASP是怎么工作的。按钮|禁用|扫瞄器 扫瞄器的前进按钮使得我们可以便利地前往之前会见过的页面,它无疑十分有效。但偶然候我们不能不封闭这个功效,以避免用户打乱预定的页面会见序次。本文先容收集上可找到的各类禁用扫瞄器前进按钮计划,剖析它们各自的优弱点和合用场所。
1、概述
已经有很多人问起,“如何才干‘禁用’扫瞄器的前进按钮?”,大概“如何才干避免用户点击前进按钮前往之前扫瞄过的页面?”在ASP论坛上,这个成绩也是问得最多的成绩之一。遗憾的是,谜底十分复杂:我们没法禁用扫瞄器的前进按钮。
起先我关于竟然有人想要禁用扫瞄器的前进按钮感应难以想象。厥后,看到居然有那末多的人想要禁用这个前进按钮,我也就豁然(想要禁用的只要前进按钮,不包含扫瞄器的行进按钮)。由于在默许情形下,用户提交表单以后能够经由过程前进按钮前往表单页面(而不是利用“编纂”按钮!),然后再次编纂并提交表单向数据库拔出新的纪录。这是我们不肯看到的。
因而我就决意要找出制止呈现这类情形的办法。我会见了很多网站,参考了这些网站所先容的各类完成办法。假如你常常会见ASP编程网站,本文所先容的部份内容你大概已见到过。本文的义务是把各类大概的办法都先容给人人,然后找出最好的办法!
2、克制缓存
在我找到的很多计划中,个中有一种倡议克制页面缓存。详细是利用服务器端剧本,以下所示:
<%
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"
IfLen(Session("FirstTimeToPage"))>0then
用户已会见过以后页面,如今是再次前往会见。
扫除会话变量,将用户重定向到登录页面。
Session("FirstTimeToPage")=""
Response.Redirect"/Bar.asp"
Response.End
EndIf
假如程序运转到这里,申明用户可以检察以后页面
以下入手下手创立表单
%>
<formmethod=postaction="SomePage.asp">
<inputtype=submit>
</form>
我们借助会话变量FirstTimeToPage反省用户是不是是第一次会见以后页面。假如不是第一次(即Session("FirstTimeToPage")包括某个值),那末我们就扫除会话变量的值,然后把用户从头定向到一个入手下手页面。如许,当表单提交时(此时SompePage.asp被翻开),我们必需付与FirstTimeToPage一个值。即,在SomePage.asp中我们必要加高低面的代码:
Session("FirstTimeToPage")="NO"
如许,已翻开SomePage.asp的用户假如点击前进按钮,扫瞄器将从头哀求服务器下载页面,服务器反省到Session("FirstTimeToPage")包括了一个值,因而就扫除Session("FirstTimeToPage"),并把用户重定向到其他页面。固然,一切这统统都必要用户启用了Cookie,不然会话变量将是有效的。(有关该成绩的更多申明,请拜见Forsessionvariablestowork,musttheWebvisitorhavecookiesenabled?)
别的,我们也能够用客户端代码使扫瞄器不再缓存Web页面:
<html>
<head>
<metahttp-equiv="Expires"CONTENT="0">
<metahttp-equiv="Cache-Control"CONTENT="no-cache">
<metahttp-equiv="Pragma"CONTENT="no-cache">
</head>
假如利用下面的办法强迫扫瞄器不再缓存Web页面,必需注重以下几点:
只要在利用平安毗连时“Pragma:no-cache”才避免扫瞄器缓存页面。关于不受平安回护的页面,“Pragma:no-cache”被视为与“Expires:-1”不异,此时扫瞄器仍然缓存页面,但把页面标志为当即过时。在IE4或5中,“Cache-Control”METAHTTP-EQUIV标志将被疏忽,不起感化。
在实践使用中我们能够加上一切这些代码。但是,因为这类办法不克不及合用于一切的扫瞄器,以是是不保举利用的。但假如是在Intranet情况下,办理员能够把持用户利用哪一种扫瞄器,我想仍是有人会利用这类办法。
3、其他办法
接上去我们要会商的办法今后退按钮自己为中央,而不是扫瞄器缓存。这儿有一篇文章RewiringtheBackButton很值得参考。不外我注重到,假如利用这类办法,固然用户点击一下前进按钮时他不会看到之前输出数据的页面,但只需点击两次就能够,这可不是我们但愿的效果,由于良多时分,刚强的用户老是可以找到绕过防备措施的举措。
别的一种禁用前进按钮的举措是用客户端javascript翻开一个没有工具条的窗口,这使得用户很难前往前一页面,但不是不成能。一种更平安但相称末路人的办法是,当表单提交时翻开一个新的窗口,与此同时封闭表单地点的窗口。但我以为这类办法不值得仔细思索,由于我们总不克不及让用户每提交一个表单就翻开一个新窗口。
那末,在谁人我们不想让用户前往的页面是不是也能够到场javascript代码呢?在这个页面中到场的javascript代码可用来发生点击行进按钮的效果,如许也就抵消了用户点击前进按钮所发生的举措。用于完成该功效的javascript代码以下所示:
<scriptlanguage="javascript">
<!--
javascript:window.history.forward(1);
//-->
</script>
一样地,这类办法固然无效,但间隔“最好的办法”还差得很远。厥后我又看到有人倡议用location.replace从一个页面转到另外一个页面。这类办法的道理是,用新页面的URL交换以后的汗青记录,如许扫瞄汗青纪录中就只要一个页面,前进按钮永久不会变成可用。我想这大概恰是很多人所追求的办法,但这类办法仍然不是任何情形下的最好办法。利用这类办法的实比方下所示:
<AHREF="PageName.htm">克制前进到本页面的链接</A>
这类办法的弱点在于:复杂地使用Response.Redirect将不再无效,这是由于每次用户从一个页面转到另外一个页面,我们都必需用客户端代码扫除location.history。别的还要注重,这类办法扫除的是最初一个会见汗青纪录,而不是全体的会见纪录。
点击下面的链接,你将翻开一个复杂的HTML页面。再点击前进按钮,你能够看到这时候翻开的不是本页面,而是本页面之前的页面!(固然,你必需在扫瞄器中启用了客户端javascript代码。)
经由一番细心的寻寻找觅以后,我发明仍然没法找出真正可以完整禁用扫瞄器前进按钮的举措。一切这里先容的办法都可以在分歧水平上、以分歧的体例克制用户前往前一页面,但它们都有各自的范围。因为不存在可以完整禁用前进按钮的办法,以是最好的计划应当是:夹杂使用客户端剧本和服务器端剧本。
实现规模效益。与传统的用户拥有硬件软件所有权和使用权以及传统的应用服务商提供一对一的服务模式不同,ASP拥有应用系统所有权,用户拥有使用权,应用系统集中放在ASP的数据中心中,集中管理,分散使用,以一对多的租赁的形式为众多用户提供有品质保证的应用技术服务,实现规模效益。
作者:
莫相离
时间:
2015-1-18 16:10
代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。
作者:
兰色精灵
时间:
2015-1-22 09:40
学习是为了用的,是为了让你的程序产生价值,把握住这个原则会比较轻松点。除此之外,课外时间一定要多参加一些社会实践活动,来锻炼自己的能力。
作者:
分手快乐
时间:
2015-1-31 05:52
以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。
作者:
老尸
时间:
2015-2-6 17:44
不是很难但是英文要有一点基础网上的教程很少有系统的详细的去买书吧,另不用专门学习vb关于vbscript脚本在asp教材都有介绍
作者:
变相怪杰
时间:
2015-2-17 20:38
我们必须明确一个大方向,不要只是停留在因为学而去学,我们应有方向应有目标.
作者:
爱飞
时间:
2015-3-5 22:51
接下来就不能纸上谈兵了,最好的方法其实是实践。实践,只能算是让你掌握语言特性用的。而提倡做实际的Project也不是太好,因为你还没有熟练的能力去综合各种技术,这样只能使你自己越来越迷糊。
作者:
若相依
时间:
2015-3-12 16:35
运用经典的例子。并且自己可以用他来实现一些简单的系统。如果可以对他进行进一步的修改,找出你觉得可以提高性能的地方,加上自己的设计,那就更上一个层次了,也就会真正地感到有所收获。
作者:
乐观
时间:
2015-3-20 00:06
用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2