关于投票ip限制的一种手段
2012-11-06 13:15
183 查看
项目中有这样的一个功能,截图如下:
1、不用多说大家都应该明白这是一个什么样的功能,其实就是一个投票。
2、要求是要限制用户的ip,一个用户只能投一次。
3、用户第一次投票提示投票成功并且所支持方的票数要累计一,再次投票提示用户您已经投过了。
4、页面在加载完以后如果用户投过票,所支持方是active状态,反对方是gray状态。
经过分析,要获取用户的两个数据:ip和他支持方的标记,获取数据简单关键是怎么存储数据,本文采用了文件存储的方式,在项目里建立一个ini文件(如:ip.ini),把获取的数据按‘ip=flag;’(如:127.0.0.1=1;其中127.0.0.1是ip、1标记用户支持图中的蓝方)这种格式保存起来如下图:
剩下的就是对这个文件进行处理了,可以采用parse_ini_file()和array_key_exists(),关于这两个函数的介绍如下:
parse_ini_file:
格式:array parse_ini_file ( string $filename [, bool $process_sections ] );
$filename是要解析的ini文件。
$process_sections设置获取数组的维数,如果是true可以获取多维数组,默认的是false。
函数的返回值是联合数组。
array_key_exists:
格式:boolean array_key_exists(string $key,array $array);
$key要检测的键名。
$array被检测的数组。
函数返回boolean值,true存在,false不存在。
该功能中用到的函数如下:
/**
* 读取客户端ip
*/
function rrip(){
return $_SERVER['REMOTE_ADDR'];
}
/**
* 读取ip集合
*/
function rips(){
return parse_ini_file('ip.ini');
}
/**
* ip 地址记录
* @param string $ip ip地址
* @param int $f 1表示赞成 0表示反对
*/
function wip($ip, $f){
$str = $ip . '=' . $f . ";\r\n";
file_put_contents('ip.ini', $str, FILE_APPEND);
}
/**
* 读取 pk 数据
*/
function rpk(){
//标记用户是否pk过 true是false不是
$success = false;
//用户ip
$ip = rrip();
//已经记录的ip
$ips = rips();
//用户支持方的标记
$f = 0;
//ips集合非空 并且ip存在ips中 说明用户投过票
if(!empty($ips) && array_key_exists($ip, $ips)){
$success = true;
$f = $ips[$ip];
}
//蓝方支持数
$zc = file_get_contents('zancheng.txt');
//红方支持数
$fd = file_get_contents('fandui.txt');
echo $_GET['rpk'] . '(' . json_encode(array('zc' => $zc, 'fd' => $fd, 'success' => $success, 'f' => $f)) . ')';
}
/**
* 更新 pk 数据
*/
function upk(){
//标记是否统计 true是 false是否
$success = true;
//用户ip
$ip = rrip();
//已经记录的ip
$ips = rips();
//ips集合非空 并且ip存在ips中 不能统计
if(!empty($ips) && array_key_exists($ip, $ips)){
$success = false;
}else{
$success = true;
}
if($success){
//标记是 赞成 还是 反对 1赞成 0反对
$f = $_GET['f'];
//赞成
if($f){
$count = file_get_contents('zancheng.txt');
$count = intval($count) + 1;
file_put_contents('zancheng.txt', $count);
}else{
$count = file_get_contents('fandui.txt');
$count = intval($count) + 1;
file_put_contents('fandui.txt', $count);
}
//记录ip 和 标记
wip($ip, $f);
echo $_GET['upk'] . '(' . json_encode(array('success' => true)) . ')';
}else{
echo $_GET['upk'] . '(' . json_encode(array('success' => false)) . ')';
}
}
1、不用多说大家都应该明白这是一个什么样的功能,其实就是一个投票。
2、要求是要限制用户的ip,一个用户只能投一次。
3、用户第一次投票提示投票成功并且所支持方的票数要累计一,再次投票提示用户您已经投过了。
4、页面在加载完以后如果用户投过票,所支持方是active状态,反对方是gray状态。
经过分析,要获取用户的两个数据:ip和他支持方的标记,获取数据简单关键是怎么存储数据,本文采用了文件存储的方式,在项目里建立一个ini文件(如:ip.ini),把获取的数据按‘ip=flag;’(如:127.0.0.1=1;其中127.0.0.1是ip、1标记用户支持图中的蓝方)这种格式保存起来如下图:
剩下的就是对这个文件进行处理了,可以采用parse_ini_file()和array_key_exists(),关于这两个函数的介绍如下:
parse_ini_file:
格式:array parse_ini_file ( string $filename [, bool $process_sections ] );
$filename是要解析的ini文件。
$process_sections设置获取数组的维数,如果是true可以获取多维数组,默认的是false。
函数的返回值是联合数组。
array_key_exists:
格式:boolean array_key_exists(string $key,array $array);
$key要检测的键名。
$array被检测的数组。
函数返回boolean值,true存在,false不存在。
该功能中用到的函数如下:
/**
* 读取客户端ip
*/
function rrip(){
return $_SERVER['REMOTE_ADDR'];
}
/**
* 读取ip集合
*/
function rips(){
return parse_ini_file('ip.ini');
}
/**
* ip 地址记录
* @param string $ip ip地址
* @param int $f 1表示赞成 0表示反对
*/
function wip($ip, $f){
$str = $ip . '=' . $f . ";\r\n";
file_put_contents('ip.ini', $str, FILE_APPEND);
}
/**
* 读取 pk 数据
*/
function rpk(){
//标记用户是否pk过 true是false不是
$success = false;
//用户ip
$ip = rrip();
//已经记录的ip
$ips = rips();
//用户支持方的标记
$f = 0;
//ips集合非空 并且ip存在ips中 说明用户投过票
if(!empty($ips) && array_key_exists($ip, $ips)){
$success = true;
$f = $ips[$ip];
}
//蓝方支持数
$zc = file_get_contents('zancheng.txt');
//红方支持数
$fd = file_get_contents('fandui.txt');
echo $_GET['rpk'] . '(' . json_encode(array('zc' => $zc, 'fd' => $fd, 'success' => $success, 'f' => $f)) . ')';
}
/**
* 更新 pk 数据
*/
function upk(){
//标记是否统计 true是 false是否
$success = true;
//用户ip
$ip = rrip();
//已经记录的ip
$ips = rips();
//ips集合非空 并且ip存在ips中 不能统计
if(!empty($ips) && array_key_exists($ip, $ips)){
$success = false;
}else{
$success = true;
}
if($success){
//标记是 赞成 还是 反对 1赞成 0反对
$f = $_GET['f'];
//赞成
if($f){
$count = file_get_contents('zancheng.txt');
$count = intval($count) + 1;
file_put_contents('zancheng.txt', $count);
}else{
$count = file_get_contents('fandui.txt');
$count = intval($count) + 1;
file_put_contents('fandui.txt', $count);
}
//记录ip 和 标记
wip($ip, $f);
echo $_GET['upk'] . '(' . json_encode(array('success' => true)) . ')';
}else{
echo $_GET['upk'] . '(' . json_encode(array('success' => false)) . ')';
}
}
相关文章推荐
- 关于投票ip限制的一种手段
- 关于投票系统刷票方式原理(突破ip限制刷票PHP版)
- 利用HTML实现限制ip的投票网站作弊方案
- 关于PHP mysql_real_escape_string() 函数对数据库的保护作用 ,预防数据库被攻击的一种手段
- 关于 【通过代理访问】 的研究,【突破 IP ,“无限制”投票】
- 关于nginx限制IP或IP段的问题2011
- 限制IP投票的程序,不能用网…
- 利用HTML实现限制ip的投票网站作弊方案
- 破解网络投票IP限制
- PHP实现的限制IP投票程序IP来源分析
- 关于如何解决特定场景下WPF4.0中“XamlWriter.Save序列化限制”问题的一种思路
- ASP实例:限制ip投票
- 通过客户端IP限制投票次数
- 在投票系统方法的原则刷票(突破ip限制刷票PHP版)
- PHP、MySQL、Ajax实现限制ip、浏览器投票
- 关于QQ注册如何突破IP限制的说明附全部源代码下载
- PHP实现的限制IP投票程序IP来源分析
- PHP投票小程序、防超时、防IP限制
- PHP实现通过IP限制投票次数
- 实现不受IP限制多次投票程序