投票系统防刷票的一些想法
时间:2006-11-07 来源:blau
采用$_SESSION和$_COOKIE做双重验证,不知道是不是罗嗦了,貌似用iecv15.exe
下载
清掉Cookie的缓存后把这些玩意全部清除掉了,但是用来防防君子还是不错的 ^^
另外在做session实验的时候还参考一个MM写的文章
http://blog.sina.com.cn/u/46599af7010003u6
case "vote":
if(!isset($_SERVER['HTTP_USER_AGENT']))
rollback("请用浏览器投票,不要用刷票脚本 T_T 如有任何出入请反馈到论坛");
/*
*校验传入的pid值是否和数据库中的一致
*并校验票选号码和页码是否为数值类型
*/
if($_GET['pid']==$vote->getpid($_GET['vid']) and is_numeric($_GET['vid']) and is_numeric($_GET['p']))
{
//获取票选的信息
$data=$vote->get($_GET['vid']);
/*
*检验投票的vid是否在session中
*校验是否已经超过规定票数
*/
if(strpos($_SESSION['sec_str'],"%".$_GET['vid'])===false && $_SESSION['allow_num']>0 && $_SESSION['isvoted']!=true)
{
if(strpos($_COOKIE['sec_str'],"%".$_GET['vid'])===false && $_COOKIE['allow_num']>0 && $_COOKIE['isvoted']!=true)
{
$vote->addticket($_GET['vid']);
$_SESSION['sec_str'].="%".$_GET['vid'];
$_SESSION['allow_num']--;
$_SESSION['votesite']=$data['sitename'];
//$_SESSION['ip']=$vote->getip();
//setcookie("votetime",gmdate("Y年m月d日H时i分s秒",time()+8*3600),time()+$lifetime*30);
setcookie("sec_str",$_COOKIE['sec_str']."%".$_GET['vid'],time()+$lifetime*30);
setcookie("allow_num",$_COOKIE['allow_num']--,time()+$lifetime*30);
setcookie("votesite",$data['sitename'],time()+$lifetime*30);
jumpto("感谢参与投票,您还可以投".$_SESSION['allow_num']."票","list.php?p=".$_GET['p']."");
}
else
{
if($_COOKIE['allow_num']=0)
{
setcookie("isvoted",true,time()+$lifetime*30);
}
jumpto("您已经给".$_COOKIE['votesite']."投过票了 :)","list.php?p=".$_GET['p']."");
}
}
else
{
if($_SESSION['allow_num']=0)
$_SESSION['isvoted']=true;
jumpto("您已经给".$_SESSION['votesite']."投过票了,请不要重复投票 ^^","list.php?p=".$_GET['p']."");
}
}
else
{
//获取get过来的参数
foreach($_GET as $key=>$value)
{
$istr.=$key."=".$value."&";
}
$istr=trim($istr,"&");
//使用vote实例中的logger类
require_once("class.logger.php");
$logger=new logger("running");
$logger->add($istr);
rollback("传递的参数错误,请刷新页面后再投票");
}
break;
相关阅读 更多 +
排行榜 更多 +