最近学校导航站找我让我给他们做一个投票系统的网站,我一口答应了,他们只是要求不准刷票情况出现,我也一口答应了。。我答应的太干脆了。

  然后我便开始做这个网站,网站做出来没花太多时间,并且我是用IP来判断是否投过票,现在想起来,IP,唉,,,痛啊啊啊啊啊。

  投票的前一天,我给导航站的看网站,他们觉得可以,并且希望只能用学校内网投票,然后又改,还好服务器是在学校里面的,内网的IP可以直接访问的,在IP处理这一方面直接用的是正则表达式,只允许172.16.0.0到172.32.255.255的IP投票,然后我天真的以为这样就可以防止刷票了。

  投票的第一天,很多队伍都很为内网投票很头疼,我告诉了他们可以用VPN连到校内网进行投票。我虽然是这么一说了,但是万万没有想到,每连一次VPN,IP就换一次,意思说刷票情况又出现了。为了防止这一情况,我设置了cookie,保存当前用户投票的队伍,若是刷票的话,下一票肯定还是这个队,所以我就这么做了,同时我还设置了验证码。我再次天真的以为刷票风云就可以这么结束了,可万万没想到厉害的还在后面,先上一张图:

  我呵呵勒个呵呵,在跟我开玩笑吗?百度一下一大片一大片的软件,自动更换IP,自动输入验证码,啊啊啊啊啊啊啊啊,我当场就哭了,哭的相当的惨呀,惨不忍睹呀,弄了老半天就这么给破了,不甘心呀。

  我没有办法了,我之后弄邮箱验证了。以前没有写过邮箱这一块的程序,在网上看了下实现方法,当然我很担心,如果发邮件的话会不会被比如说腾讯邮箱拦截下来之类的呀,表示也很蛋疼,便在网上直接找到了个类,将这个邮箱类看懂之后直接拿来用了。有个域名,是freestu.net,并且这学期开学之后去弄了腾讯的企业邮箱,觉得相当爽,以自己的域名来做邮箱,好霸气高端上档次。看懂类之后直接拿来实例化用了,现在网站是集合IP,cookie,验证码,邮箱验证四大功能防刷票。

  已经不会再爱了,在群里面我被骂惨了,越整越难投票了。不爱了。

  我再讲讲每个方法的实现吧。

  IP,用到的是一个函数:

getenv("REMOTE_ADDR")

  cookie是用的函数:

setcookie("ip",$ip,$time);
setcookie("vote_id",$tb_vote_id,$time);//设置cookie,到时候可以判断VPN之后还是投这个队的话就投不起

  cookie的检查:

$_COOKIE['vote_id']==$tb_vote_id

  验证码是以前写的一个类,直接拿来用了,主要就是随机生成一个4位数,包括A-Z,a-z和0-9,验证的时候区分大小写,然后存在session里面。

  发邮箱的类:

class.phpmailer.php

  邮箱发送的内容也是随机一个10位的包括大写小写数字的验证码,发过去然后邮箱获得后可以直接复制,同时这个验证码存入cookie里面,这里存session也可以的,然后让用户输入验证码,判断这个邮箱的验证码与cookie或者session中的是否一样。

  投票还没有结束,但是起码我看见了成效,没有再刷票了。yeah~~~~

转载请注明出处:http://www.cnblogs.com/yydcdut/p/3470105.html

关于PHP写的投票网站之刷票风云的更多相关文章

  1. 关于PHP写的投票网站之刷票终结版

    告诉大家一个坏消息,还是有刷票的行为,有图有真相: 倒数第三项是时间轴,倒数第二项是IP,倒数第一项是邮箱,你们要刷票,拦都拦不住呀呀呀呀呀呀!!!!! 看看这些时间的间隔,看看这些IP的地址,哎,再 ...

  2. 利用django创建一个投票网站(五)

    创建你的第一个 Django 项目, 第五部分 这一篇从第四部分(en)结尾的地方继续讲起.我们在前几章成功的构建了一个在线投票应用,在这一部分里我们将其创建一些自动化测试. 自动化测试简介 自动化测 ...

  3. 利用django创建一个投票网站(二)

    创建你的第一个 Django 项目, 第二部分 这一篇从第一部分(zh)结尾的地方继续讲起.本节我们将继续写 Web 投票应用,并主要关注 Django 提供的自动生成的管理页面(admin site ...

  4. 利用django创建一个投票网站(一)

    这是教程的原始链接:http://django-intro-zh.readthedocs.io/zh_CN/latest/part1/ 创建你的第一个 Django 项目, 第一部分 来跟着实际项目学 ...

  5. IIS写权限漏洞和XFF刷票原理

    IIS写权限漏洞 PUT写入漏洞 此漏洞主要是因为服务器开启了webdav的组件导致的 1.扫描漏洞,yes,可以PUT: 2.用老兵的工具上传一句话文件test.txt,然后move改名为shell ...

  6. redis 实例2 构建文章投票网站后端

    redis 实例2 构建文章投票网站后端   1.限制条件 一.如果网站获得200张支持票,那么这篇文章被设置成有趣的文章 二.如果网站发布的文章中有一定数量被认定为有趣的文章,那么这些文章需要被设置 ...

  7. 利用django创建一个投票网站(三)

    创建你的第一个 Django 项目, 第三部分 这一篇从第二部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,并且聚焦于如何创建公用界面--也被称为"视图". 设计哲学 Dj ...

  8. PHP教程-防止网站被刷票的小技巧

    在Web开发中,投票模块会经常出现.这样就使得防止刷票,成了至关重要的技术.以下是兄弟连教育www.itxdl.cn总结的一些防止刷票方法: 1. IP限制 这是使用的最多,也是最广泛,不可少的刷票限 ...

  9. 利用django创建一个投票网站(四)

    创建你的第一个 Django 项目, 第四部分 这一篇从第三部分(zh)结尾的地方继续讲起.我们将继续编写投票应用,专注于简单的表单处理并且精简我们的代码. 编写一个简单的表单 让我们更新一下在上一个 ...

随机推荐

  1. [ 转载 ] Mysql 数据库常用命令

    完整的创建数据库例子: >create database db_test default character set utf8 collate utf8_general_ci; >use ...

  2. parcelable 和 serializable 区别

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha serializable 是 java 中的 序列化 接口. parcelable 是 ...

  3. 直接插入排序之Java实现

    直接插入排序之Java实现 一.方法一 package cn.com.zfc.lesson21.sort; import java.util.Arrays; /** * * @title Insert ...

  4. 重庆市队选拔 CQOI2015 解题报告

    文章链接:http://www.cnblogs.com/Asm-Definer/p/4434601.html 题目链接:http://pan.baidu.com/s/1mgxIKli 官方数据:htt ...

  5. bzoj 3105

    感觉这题出得真好. 我们将问题简化过后是这样的: 给定一个数集,找一个最大的非空子集(一个集合的大小是它的元素和)A,使得A不存在一个非空子集,其所有元素的异或和为0. 因为我们始终可以只选一个数,所 ...

  6. BZOJ 4380 Myjnie 区间DP

    4380: [POI2015]Myjnie Time Limit: 40 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 162  Solved: ...

  7. .NET面试宝典-高级(一)

    1. DateTime.Parse(myString); 这段代码有什么问题? A:区域信息即CultureInfo没有指定.如果不指定的话,它将采用默认的机器级的设置(见:控制面板->区域和语 ...

  8. faceNet编译问题

    1.执行align_dataset_mtcnn.py出现无法导入检测模型的问题 a.现象如下 Creating networks and loading parameters Traceback (m ...

  9. 华为S5300系列交换机V100R005SPH020升级补丁

    S23_33_53-V100R005SPH020.pat 附件: 链接:https://pan.baidu.com/s/1-qgNEtRsZbNnC4eK4DTctA  密码:wpn3

  10. Android开发资料

    Android      [开发环境及工具] [控件使用及示例源码] [热更新] [开源组件] [系统内核] [错误及调试]   来自  http://www.howcode.cn ,内容不错,学习中 ...