Problème de cookies sur un vote

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par landry, 2 Avril 2014.

Tags:
  1. landry
    landry WRInaute discret
    Inscrit:
    3 Mai 2006
    Messages:
    208
    J'aime reçus:
    0
    Bonjour,

    J'empêche un internaute de voter 2 fois avec un système de cookies que je paramètre au maxi (3600 secondes).
    Blocage par IP + ID du topic.

    J'ai deux problèmes:
    1) si un internaute vote pour un topic, plus personne d'autre ne peut voter pour ce topic.
    2) si un internaute vote pour un topic A il lui est donc interdit de revoter pour ce topic A, mais s'il va voter pour un topic B le vote sur le topic A est à nouveau possible.

    En fait on dirait que l'interdiction de vote ne concerne que le dernier topic ayant reçu un vote et qu'en plus elle bloque toutes les IP, pas seulement celle du votant.

    L'IP je la récupère ainsi :

    Code:
    //Fonction pour l'ip
    function getIp()
    {
        if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $ip_vote = $_SERVER['HTTP_X_FORWARDED_FOR'];
        }
        elseif(isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $ip_vote = $_SERVER['HTTP_CLIENT_IP'];
        }
        else
        {
            $ip_vote = $_SERVER['REMOTE_ADDR'];
        }
        return $ip_vote;
    }
    
    //Ip utilisateur
    $ip_vote = getIp();
    La fonction déjà voté est celle-ci :

    Code:
    //Fonction pour la notation
    function notation($id_vote,$ip_vote){
    
        //L'utilisateur a t'il déja voté?
       	$deja_voter = mysql_query("SELECT ip FROM note WHERE ip = \"$ip_vote\" AND id_page = \"$id_vote\"");
     
        //L'utilisateur n'a pas voté, on montre le formulaire
        if(mysql_num_rows($deja_voter) == 0)
        {
            echo '     <form name="monform" id="monform" method="post">     <label>Noter cette recette</label>     <select name="note" onchange="javascript:submit(this)">     <option value="">Note</option>     <option value="0">0</option>        <option value="1">1</option>     <option value="2">2</option>     <option value="3">3</option>     <option value="4">4</option>     <option value="5">5</option>     </select>     </form>     ';
        }   
     
        //Si action de valider et que la note est différent de vide
        if(isset($_POST['note']) && $_POST['note'] != NULL){
         
    	 //On vérifie si le cookie existe et si tel est le cas, c'est que l'utilisateur tente de voter plusieurs fois
        if(isset($_COOKIE["deja_voter"]) && $_COOKIE["deja_voter"] == $id_vote){
             echo ("Un seul vote autoris&eacute; ... merci!");
    		 return false;
    		}		
    			
    		        //Note de l'utilisateur
         $note = $_POST['note'];
      
                   //Insertion en BDD	
         $insert = mysql_query('INSERT INTO note (id_page, note, ip) VALUES (" '.$id_vote.' ", " '.$note.' ", " '.$ip_vote.' ") ');
     	    							
            //Si il y a une erreur
            if(!$insert) {
                echo('Requ&ecirc;te invalide : ' . mysql_error());
    			return false;
            }
            //Tout est ok, on informe et on redirige
            else{
                echo 'Merci d\'avoir not&eacute; cette recette! <br/>         Chargement en cours <img alt="Loading" src="images/images-vote/loading.gif" style="width:32px;height:32px;"/>           <script type="text/javascript">                 document.getElementById("monform").innerHTML = "";         window.setTimeout(function(){self.location.href="'.$_SERVER['REQUEST_URI'].'";},3000);         </script>';
     
            }
        }
    Et la création du cookies dans mon header :

    Code:
    	<!-- PHP -->
    
        $topic_id = request_var('t', 0);
        //On créer un cookie d'une duréé d'une heure pour éviter les retours en arrière
    	if(isset($_POST['note']) && $_POST['note'] != NULL)
    	{
    	 setcookie('deja_voter',$topic_id,(time() + 3600));
        }
    <!-- ENDPHP -->
    Si vous avez une idée, je suis preneur.
    Merci :)
     
  2. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 163
    J'aime reçus:
    338
    PHP:
    <span class="syntaxdefault">setcookie</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'deja_voter'</span><span class="syntaxkeyword">,</span><span class="syntaxdefault">$topic_id</span><span class="syntaxkeyword">,(</span><span class="syntaxdefault">time</span><span class="syntaxkeyword">()&nbsp;+&nbsp;</span><span class="syntaxdefault">3600</span><span class="syntaxkeyword">));&nbsp;</span><span class="syntaxdefault"></span>
    Il faut un cookie différent par topic, et au lieu de mettre un nom trop explicite:
    PHP:
    <span class="syntaxdefault">setcookie</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">md5</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'deja_voter'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$topic_id</span><span class="syntaxkeyword">),</span><span class="syntaxdefault">$topic_id</span><span class="syntaxkeyword">,(</span><span class="syntaxdefault">time</span><span class="syntaxkeyword">()&nbsp;+&nbsp;</span><span class="syntaxdefault">3600</span><span class="syntaxkeyword">));&nbsp;</span><span class="syntaxdefault"></span>
     
  3. landry
    landry WRInaute discret
    Inscrit:
    3 Mai 2006
    Messages:
    208
    J'aime reçus:
    0
    Bonjour,

    Pffff que c'est long a redémarrer une livebox, tout un poème. Enfin ...

    Sinon, ça ne fonctionne pas, je peux revoter autant de fois que je veux sans même changer de page, le blocage vote ne marche plus.
     
  4. spout
    spout WRInaute accro
    Inscrit:
    14 Mai 2003
    Messages:
    9 163
    J'aime reçus:
    338
    Est-ce que tu as bien changé ça aussi:
    PHP:
    <span class="syntaxdefault"></span><span class="syntaxkeyword">if(isset(</span><span class="syntaxdefault">$_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"deja_voter"</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> $_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxstring">"deja_voter"</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> $id_vote</span><span class="syntaxkeyword">){</span><span class="syntaxdefault"> </span>
    ça devient:
    PHP:
    <span class="syntaxdefault">$cookieKey </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> md5</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'deja_voter'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$id_vote</span><span class="syntaxkeyword">);<br />if(isset(</span><span class="syntaxdefault">$_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$cookieKey</span><span class="syntaxkeyword">])</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">&&</span><span class="syntaxdefault"> $_COOKIE</span><span class="syntaxkeyword">[</span><span class="syntaxdefault">$cookieKey</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">==</span><span class="syntaxdefault"> $id_vote</span><span class="syntaxkeyword">){</span><span class="syntaxdefault"> </span>
     
  5. landry
    landry WRInaute discret
    Inscrit:
    3 Mai 2006
    Messages:
    208
    J'aime reçus:
    0
    Ah ben non :oops:

    Mais j'ai vérifié via Google Chrome il n'y a bien qu'un seul cookie de créé.

    Je modifie l'ensemble alors.
    Merci
     
  6. landry
    landry WRInaute discret
    Inscrit:
    3 Mai 2006
    Messages:
    208
    J'aime reçus:
    0
    Ca fonctionne nickel !
    Super merci. :D

    Et merci aussi à WRI où j'ai pu trouver toute l'assistance dont j'avais besoin, et rapidement en prime, je remercie également toutes les personnes qui m'ont aidé sur ce script qui est enfin fonctionnel. :wink:
     
Chargement...
Similar Threads - Problème cookies vote Forum Date
Problème suivi GTM : url lancées, cookies absents. Développement d'un site Web ou d'une appli mobile 29 Mai 2021
Gestion de cookies problème directives CNIL. Administration d'un site Web 15 Novembre 2019
Problème de sessionID ? cookies ? Débuter en référencement 20 Novembre 2010
Probleme Choix de toutes les regions si pas de sessions cookies Développement d'un site Web ou d'une appli mobile 28 Décembre 2008
Problème de cookies Développement d'un site Web ou d'une appli mobile 22 Mai 2008
Problème de Cookies Développement d'un site Web ou d'une appli mobile 16 Mai 2006
problème avec le développeur Droit du web (juridique, fiscalité...) Mercredi à 14:05
Problème désindexation des pages de Google Débuter en référencement Mardi à 18:25
Problème d'indexation de pages sur Google Problèmes de référencement spécifiques à vos sites 31 Mai 2022
problème de redirection non souhaitée Administration d'un site Web 28 Avril 2022
Problème d'indexation Produits Prestashop Crawl et indexation Google, sitemaps 28 Avril 2022
Problème d'affichage des campagnes Google Ads dans un tableau de bord Data Studio AdWords 26 Avril 2022
Problème de vitesse d'affichage des pages sur Analytics Google Analytics 26 Avril 2022
Problème : Google Crawl et Index des pages en No Index et bloqué par le robot.txt Crawl et indexation Google, sitemaps 26 Avril 2022
Problème avec GA4 : nb de visiteurs temps réel et par jour Google Analytics 19 Avril 2022
Problème indexation pages précises en React.js Débuter en référencement 19 Avril 2022
Problème de référencement Demandes d'avis et de conseils sur vos sites 8 Avril 2022
Problème adsence : Annonces ne s'affichent plus AdSense 10 Mars 2022
problèmes procédures stockées Administration d'un site Web 9 Mars 2022
Problème récupération fichier vps Développement d'un site Web ou d'une appli mobile 5 Mars 2022