一、判斷上一級頁面
通過http請求header中的refere,來判斷投票操作的上級頁面,可以防止直接發送請求來進行投票的部分自動投票軟件。
/**
* 判斷上一級頁面
*/
if(!strpos($_SERVER['HTTP_REFERER'],'http://www.rainbowz.com/vote.php/Vote/index.html')){
$this->ajaxReturn("請從投票頁面進入投票!");
}
二、判斷是否在微信上操作
通過請求頭部信息中的agent來判斷打開的客戶端。
/**
* 判斷客戶端信息
*/
if(!strpos($_SERVER['HTTP_USER_AGENT'],'MicroMessenger')){
$this->ajaxReturn("請在微信上進行投票!");
}
三、驗證碼
在投票的頁面上添加驗證碼信息並加密,傳遞給后台,判斷驗證碼是否一致。
1、在html中
<script type="text/javascript">
/**
* 請求驗證碼設置
*/
<?php
if(!isset($_SESSION['_chek_code'])){
$_SESSION['_chek_code']=$string.uuid();
}
?>
var _chek_code='<?php echo $_SESSION['_chek_code']; ?>';
</script>
2、在js中的投票方法中
function vote(){
/**
* 驗證碼
*/
var _check_code_salt='gzh@#$+==###7076**%$#';
var data={checkCode:$.md5(_chek_code+_check_code_salt)};
var url = './insertSingleVoteInfo';
$.ajax({
type: "POST",
url:url,
data:data,
success: function(dataMsg){
},
error:function(){
}
});
}
3、在后台controller中
/**
* 驗證碼
*/
$page_code=$_POST['checkCode'];
$_check_code_salt='gzh@#$+==###7076**%$#';
$server_code=md5($_SESSION['_chek_code'].$_check_code_salt);
if($page_code!==$server_code){
$this->ajaxReturn("驗證碼錯誤,請手動投票!");
// $this->ajaxReturn($server_code);
}
四、關注公眾號方可投票
如果可以,微信用戶驗證的時候加上關注后方可投票也可判斷用戶的信息真偽
五、地域限制
通過獲取IP來限制參與投票的用戶IP地址為某一地域,僅適用於地區性的投票。
