仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1475|回复: 19
打印 上一主题 下一主题

[学习教程] ASP教程之避免网上反复投票的办法(一)

[复制链接]
蒙在股里 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:39:23 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
ASP最大的缺点在于网络的安全性和可靠性,企业将经营数据放在开放的平台上,最大的担忧就是如何保证这些数据不被其他人破坏。投票|反复   网上查询拜访是疾速搜集信息的无效办法,然而今朝局部网站的网上查询拜访存在一个缺乏的地方,即任何用户依据本人的喜好可以一连重复投票。由于一切的查询拜访了局都是为决议计划作参考,不论对一个单元仍是一个部分,决议计划掉误城市带来意想不到的丧失,所以避免反复投票具有主要意义。本文所给出的基于ASP(Active Server Page)的几种办法在必定水平上可以避免一连重复投票。  

ASP对象  
在ASP中有5个对象:Request、Response、Session、 Application、Server。上面只针对本文能用到的对象属性停止申明,其他方面的属性请参考相干材料。本文供应的办法的道理是:设置一个逻辑变量IsVoted,在投票之前验证IsVoted 的值,只要值为False时,才干投票,不然就以为已投过票。  
Application对象是处置某一特定ASP使用中一切用户同享信息的对象,也就是说Application对象是一切联网机械上一切网页所同享的对象。由 Application对象所界说和设置的变量,一切用户的一切网页都可会见。使用Application对象可以界说变量和改动变量的值,其语法格局以下: Application(“变量名”)=表达式。在.asp 文件中可经由过程Application(“变量名”)加以援用。Application把变量的值保留在Web Server 端。  

Session对象用于单个用户办理信息,Session变量只在页面间挪用(即在一个Session内)。Session变量是公有的,一个Session中某个变量值的改动不影响另外一个Session中同名变量的值。Session对象也把变量值保留在办事器端,然而各个Session保留的地位分歧。由于Session是公有的,所以有几何个Session对象就存在几何个IsVoted变量,这些变量之间没有关系。  

Cookies对象是不克不及独自存在的,它依靠于Request和 Response对象,在利用时必需在Cookies前加上Request或Response。同Application和Session 一样,Cookies也能保留变量的值,然而Cookies只在阅读器客户端保留变量的值。用Cookies 所界说的变量有一个属性:可以设置Cookies变量的利用刻日,并且一旦设置了利用刻日, Cookies变量可以被从统一台机械上登录的一切用户所同享,咱们可以使用Cookies的这个属性设置距离必定工夫才干再次投票。  

Server对象次要完成一些需求WWW办事器处置的任务,本文中咱们次要使用Request.ServerVariables读取Server的情况变量中客户真个IP地址,并依据IP地址来设定相隔多长工夫统一IP地址才干再次投票。  

Global.asa文件完成同享变量和文件的界说及初始化义务。Global.asa文件必需位于ASP使用的根目次下,一个ASP使用只能有一个Global.asa文件。Global.asa中含有Application_OnStart、Application_OnEnd、Session_OnStart、 Session_OnEnd四个事务,咱们在Application_OnStart、Session_OnStart事务中界说 Application变量和Session变量和停止初始化,如许在今后的网页中就能够读取这些变量。 ASP鄙人列情形下读取Global.asa内容:  

1.在Web Server启动以后,第一次恳求挪用ASP使用中的任何.asp文件时;  

2.不在Session形态的用户恳求挪用ASP使用的.asp文件。  

办法一:使用Session对象  
在Global.asa的Session_OnStart事务中设置逻辑变量 IsVoted,初始值为FALSE(暗示还没有投票),投票以后在.asp法式中把IsVoted的值改成TRUE(暗示已投过票)。每次投票之前都要判别IsVoted的值。假如IsVoted的值为TRUE,就不克不及再投票;假如值为FALSE,则可以投票。  
由于Session对象的利用必需与阅读器的Cookies功效相共同,所以在判别IsVoted值之前,必需先判别阅读器的Cookies功效是不是翻开。如处于封闭形态,则此种办法生效,所以在这类情形下必需给出提醒信息并用Response.End号令中止.asp法式的履行,避免一连重复投票。其流程如图1:




个中判别Cookies是不是翻开的函数对照庞杂,现给出函数完成代码(VBScript)。  

< %
Function IsCookiesOpen()
Dim ClientIP, URL, QueryString, IsNew

Application.Lock
If Session(“SessionID")=Session.SessionID Then  
IsCookiesOpen = True
ClearApp
Exit Function
End If

IsNew = False
If Session(“SessionID") = Empty Then
CurrentIP =Request.ServerVariables
(“REMOTE_ADDR")
If CurrentIP <> Application(“IP") Then
ClearApp
IsNew = True
End If
End If
If Not IsNew And Application(“Visit") >= 1 Then
IsCookiesOpen = False
ClearApp
Exit Function
End If
Application(“Visit") = Application(“Visit") + 1
Application(“IP") =Request.ServerVariables
(“REMOTE_ADDR")
Session(“SessionID") = Session.SessionID

URL =“_page_=”&Request.ServerVariables
(“PATH_INFO")
QueryString=Request.ServerVariables
(“QUERY_STRING")
If Len(QueryString) > 0 Then URL = URL & “&" & QueryString
If Not Response.IsClientConnected Then ClearApp
End Function

Sub ClearApp()
Application(“Visit") = 0
Application(“IP") = “"
End Sub
% >

在.asp文件中直接用IsCookiesOpen()函数来剖断 Cookies是不是翻开。  

此种办法的破绽:假如再翻开一个新阅读器窗口,会发明在新翻开的阅读器窗口中依然可以投票。这是由于Session是公有的,一个Session中变量的改动其实不影响另外一个Session的同名变量的值。为懂得决这个成绩,上面给出办法二。
</p>  楼上说交互性不好,太牵强了吧。在微软提供的一套框架中,利用asp做网站,开发效率高,使用人数少,减少不必要的开销。交互性是互动方式,是有开发人员决定的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-19 06:36

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表