我真的很痛苦在这里试图让这个ajax电话工作,对不起这个问题的重要性。
用户单击一个按钮,这启动了ajax调用以向数据库添加投票。这是名为“addvote.php”的文件:
<?php
session_start();
/* COOKIECHECK START */
setcookie('test', 1, time()+3600);
if(!isset($_GET['cookies'])){
header("Location:/thought/addvote.php?cookies=true&id=".$_GET['id']."&ans=".$_GET['ans']);
}
if(count($_COOKIE) > 0){
$cookies=1;
} else {
$cookies=0;
}
/* COOKIECHECK END */
if($cookies==1) {
$id=$_GET["id"];
$vId="v".$id;
if (((isset($_SESSION[$vId]) && ((time() - $_SESSION[$vId]) > 180))) || (!isset($_SESSION[$vId]))) {
// last vote was more than 3 minutes ago
$_SESSION[$vId] = time(); // update/create vote time stamp
//ADD VOTE TO DATABASE
}
else {
echo "You've voted on this already";
}
}
else {
echo "Please enable cookies to make your vote count";
}
?>
应该发生什么:检查用户是否启用了Cookie。如果是这样,他们可以添加投票,如果没有告诉他们启用cookie。如果他们已启用cookie,并且他们还没有投票 - 加上投票,如果他们已经投票,请告诉他们。
实际发生的事情:尚未投票的用户点击按钮,这会启动ajax调用并成功添加投票,不会向用户发送任何消息。然后他们转到另一个问题并单击投票按钮,启动“addvote.php”,但这次它返回“你已经对此投了票”并且加了投票!这使我的页面调用运行两次,首先它添加了投票,然后它再次尝试(并返回错误)。
也许它与header()??
有关然后每个问题都会返回相同的消息并添加投票 - 除非我等待一段时间然后它会在第一个问题上运行,同样的事情会再次发生。
值得注意的是: GET变量与标题一起传递,以便我知道他们正在讨论哪个问题以及他们是否单击否或是。
再次道歉,这个问题太可怕了。
答案 0 :(得分:1)
这不会阻止投票作弊。要测试用户是否启用了cookie,您可以在投票页面上使用JavaScript设置cookie并在PHP中进行检查。但是,显然,如果有人想作弊,他或她将手动删除你的cookie。
此外,您需要在exit
调用后添加header()
以使代码正常工作:
setcookie('test', 1, time()+3600);
if(!isset($_GET['cookies'])){
header("Location:/thought/addvote.php?cookies=true&id=".$_GET['id']."&ans=".$_GET['ans']);
exit;
}