2012-01-25 7 views
2

Я действительно страдаю здесь, пытаясь заставить этот призыв ajax работать, извините за массивность этого вопроса.Обнаружение, если файлы cookie включены с PHP, перенаправление заголовков

Пользователь нажимает кнопку, это инициирует вызов 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

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

Furthemore, вам нужно добавить 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; 
} 
+0

спасибо так много Тимура! отсутствующий «выход», действительно был проблемой. – JoeRocc

+1

Вам всегда нужно помнить, что вызов 'header()' не завершает выполнение скрипта. Вот почему 'exit' или' die(); 'необходимо ... – Timur