Обнаружение, если куки включены с PHP, перенаправление заголовка - PullRequest
2 голосов
/ 25 января 2012

Я действительно страдаю, пытаясь заставить этот вызов 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, и они еще не проголосовали - добавьте голос, если они уже проголосовали, сообщите им.

Что на самом деле происходит: Пользователь, который еще не проголосовал, нажимает кнопку, это инициирует вызов ajax, и голос успешно добавляется, пользователю не отправляется сообщение. Затем они переходят к другому вопросу и нажимают кнопку голосования, инициируется «addvote.php», но на этот раз возвращается «Вы уже проголосовали» И добавляет голос! Это заставляет меня думать, что вызов страницы выполняется дважды, сначала он добавляет голос, затем он пытается снова (и возвращает ошибку).

Может быть, это как-то связано с заголовком () ??

Затем каждый вопрос возвращает это же сообщение и добавляет голос - если я не подожду некоторое время, а затем он сработает над первым вопросом, и то же самое произойдет снова.

Примечание: Переменные GET передаются вместе с заголовком, чтобы я знал, о каком вопросе они говорят, и нажали ли они «нет» или «да».

Опять же, извинения, этот вопрос ужасен.

1 Ответ

1 голос
/ 25 января 2012

Это не помешает обману с голосованием в любом случае. Чтобы проверить, включены ли у пользователя файлы cookie, вы можете, например, установить cookie с помощью JavaScript на странице голосования и проверить его в PHP. Но, очевидно, если кто-то хочет обмануть, он или она удалит ваши куки вручную.

Кроме того, вам нужно добавить 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...