防止网上重复投票的方法(二)

投票|重复

方法二:利用Cookies对象  
因为Cookies对象把变量的值保存在浏览器客户端,所以可以根据Cookies保存的IsVoted的值来判断用户是否投过票。Cookies变量和Session变量一样是私有的,但是如果我们定义了Cookies变量的生存期限,则Cookies变量是公有的,凡是从同一台机器上登录的用户在规定的时间期限没有达到时,都无法投票,这在一定程度上也能防止反复投票。实现程序流程如图2:

根据实际情况合理地设置Cookies变量的生存期限的长短,例如设定为10分钟,这样一台机器即使连续投票最多一天也只能投144张票。  

此种方法的漏洞:在Windows 9x环境下,只要把 Windows\Cookies目录下所有*.txt文件删除,又可重复投票。为了再进一步防止反复投票,下面给出方法三。  

方法三:验证IP地址与登录时间  
此方法首先利用 Request.ServerVariables(REMOTE_ADDR)取得用户的IP地址。在Web Server端建立一个标准的MDB类型的数据库,此数据库有一个表,该表只有两个字段:IP地址和登录时间。之所以设置登录时间这个字段,是考虑到拨号上网用户可能共用同一个IP地址,如果一个IP 地址只能投一次票,那么显然不合理。同时,我们还采用方法二同样的思想,必须每隔一个设定的时间段,同一个IP地址才能再次投票。所以这种方法比方法一、方法二在防止反复投票方面要严格得多。其实现的程序流程如图3:  

方法四:小范围调查  
这种方法只适用于小范围调查,思想与方法三相同,只是把方法三中的 IP地址换成可以唯一代表用户的字段,如学生证号、工作证号等。这时建立的MDB数据库只包括两个字段:证件号码与IsVoted(其中IsVoted是逻辑型字段, TRUE表示已投过票,FALSE表示还未投票,在建库时所有记录的IsVoted的值都设为 FALSE)。在投票之前,要求先输入正确的证件号码,然后再判断IsVoted的值。实现这种方法的程序流程如图4:  

从方法一到方法四,安全性越来越高,防止重复连续投票功能越来越强,但是各种方法都有各自的局限性。在应用中,用户应根据实际情况选择合适的方法。如果小范围投票,方法四无疑是最好的;如果在Internet上投票,方法三是最好的。另外一点必须提及的是:虽然Application有保存变量的功能,但是我们没有用到。因为 Application变量是一个全局性变量,如果用Application把IsVoted设为TRUE,则任何用户都无法投票;如果用Application把IsVoted设为FALSE,则任何用户都可以投票,就没有任何防范功能了。

时间: 2024-09-20 00:55:34

防止网上重复投票的方法(二)的相关文章

防止网上重复投票的方法(一)

投票|重复 网上调查是快速收集信息的有效方法,但是目前部分网站的网上调查存在一个不足之处,即任何用户根据自己的爱好可以连续反复投票.因为所有的调查结果都是为决策作参考,不管对一个单位还是一个部门,决策失误都会带来意想不到的损失,所以防止重复投票具有重要意义.本文所给出的基于ASP(Active Server Page)的几种方法在一定程度上可以防止连续反复投票.   ASP对象  在ASP中有5个对象:Request.Response.Session. Application.Server.下面

网上下载和上传数据(二) Montaque(原作)

网上下载和上传数据(二)    Montaque(原作)    上一次介绍了WebClient的一些下载和上传数据的方法,今天着重看一下WebRequest 和 WebResponse两种我们访问Internet常用的类,严格说,WebRequest是一个抽象基类,我们一般用它的衍生类HttpWebRequest 以及 FileWebRequest,FTP的访问需要手动注册,具体看后面的插入协议. 从逻辑角度上讲,Net classes 包含三个层:请求/响应层.应用协议层和传输层,依次展开,从

SQL Server中删除重复数据的方法

数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置-- 方法一declare @max integer,@id integerdeclare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1open cur_rowsfetch cur_rows into @id,@maxwhile @@fetch_status=0begins

确定Oracle数据库表中重复记录的方法

作为一个Oracle数据库开发者或者DBA,在实际工作中经常会遇到这样的问题:试图对库表中的某一列或几列创建唯一索引时,系统提示ORA-01452:不能创建唯一索引,发现重复记录. 下面我们以表code_ref为例来讨论这个问题及其解决办法. ERROR位于第1行: ORA-01452: 无法 CREATE UNIQUE INDEX:找到重复的关键字 Oracle系统提示不能对表code_ref创建一个唯一索引,因为系统发现表中存在重复的记录.我们必须首先找到表中的重复记录并删除该记录,才可以创

javascript删除数组重复元素的方法汇总

  本文实例讲述了javascript删除数组重复元素的方法.分享给大家供大家参考.具体分析如下: 这里分享一个前端面试高频题,主要实现javascript删除数组重复元素.希望对初学者有所帮助 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 //数组去重的方法 Array.prototype.unique=function(){ //集中声明变量 var oldArr=this, newArr=[oldArr[0]], len=oldA

PHP生成不重复随机数的方法汇总_php实例

无论是Web应用,还是WAP或者移动应用,随机数都有其用武之地.在最近接触的几个小项目中,我也经常需要和随机数或者随机数组打交道,所以,对于PHP如何产生不重复随机数常用的几种方法小结一下. 方法一: 复制代码 代码如下: <?php $numbers = range (1,50); //shuffle 将数组顺序随即打乱 shuffle ($numbers); //array_slice 取该数组中的某一段 $num=6; $result = array_slice($numbers,0,$n

css-CSS中页面缩小的时候右边会留白,恼人,网上找了好多方法没用。

问题描述 CSS中页面缩小的时候右边会留白,恼人,网上找了好多方法没用. 先上代码: <body> <div class="header color1"> <p>aaa</p> </div> <div class="adv-box color2"> Fill up later! </div> <div class="bg-box "> aaa <

service-创建一个服务,重复执行某个方法

问题描述 创建一个服务,重复执行某个方法 我创建了一个服务器,每5分钟运行一次.但是当程序执行到while(true),就会报错.我估计这是不允许的.有什么更好的方法能重复执行某一个方法呢? public class repService extends Service { @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } while(true){

python连接mysql数据库出错,已经试了网上的几种方法,,求助

问题描述 python连接mysql数据库出错,已经试了网上的几种方法,,求助 http://blog.csdn.net/lishan9133/article/details/7024989 之前是按照上面的教程安装了mysqldb模块,可是在实际操作过程中,找不到对应行的代码,所以并没有按照上面的改. 打开数据库连接 db = MySQLdb.connect( host='192.188.80.41', port=3306, user='root', passwd='123456', db='