以下代码位于ajax调用中。我正在努力确保人们不会经常使用会话对具有某个ID的问题进行投票。
所以他们点击一个按钮,执行以下php代码:
$id=$_GET["id"];
if ((isset($_SESSION["$id"]) && ((time() - $_SESSION["$id"]) > 180)) || (!isset($_SESSION["$id"]))) {
// last vote was more than 3 minutes ago
$_SESSION["$id"] = time(); // update/create vote time stamp
//there is code here to add the vote to the database
}
else{
echo "sorry, you've already voted recently";
}
所以我正在为每个问题id创建一个会话变量,该ID包含他们最后一次投票的time()
。我会用cookies做这件事,但可以禁用它们。
目前,我的逻辑存在一个错误,因为它允许用户继续点击按钮并添加任意数量的投票。
有人能看到我犯过的错误吗?
答案 0 :(得分:2)
isset($_SESSION[$id])
两次没有意义。现在的逻辑。
对我来说,似乎代码不会让任何人投票。因为它不会第一次通过isset($_SESSION[$id])
条件,也不会让$_SESSION[$id]
设置等等。
似乎正确的条件是
if ( (!isset($_SESSION['vote'][$id]) OR (time() - $_SESSION['vote'][$id]) > 180) )
答案 1 :(得分:1)
您需要在发送任何标头之前调用session_start()来启动会话。否则,除非启用了自动启动会话的ini设置,否则不会启用会话。此外,您的服务器必须正确配置为能够存储会话文件(通常需要可写的tmp目录)。在此处查看有关会话的更多信息:http://www.php.net/manual/en/ref.session.php
答案 2 :(得分:0)
if语句可能存在问题。请尝试以下
$id=$_GET["id"];
if (((isset($_SESSION[$id]) && ((time() - $_SESSION[$id]) > 180))) || (!isset($_SESSION[$id]))) {
// last vote was more than 3 minutes ago
$_SESSION[$id] = time(); // update/create vote time stamp
//there is code here to add the vote to the database
}
else{
echo "sorry, you've already voted recently";
}
答案 3 :(得分:-1)
也许time()返回毫秒,你应该比较180000而不是180。