Page 1 sur 1
Comment faire un vote avec sauvegarde de l'ip ?
Posté : 26 déc. 2007, 15:19
par Mykeul
Bonjour,
Je m'explique, je désire afficher sur mon site un ensemble de message.
Ces messages pourront etre evalué, il y aura un bouton + et un bouton - grace a ces vote je calculerai le ratio.
Chaque message aura un Idmsg.
Un utilisateur ne pourra voter qu'une seule fois, il faut donc que je retienne l'adresse IP
Pouvez vous m'expliquer comment je dois faire pour sauvegarder l'IP et le message auquel l'utilisateur a voté ?
Je ne vois pas comment faire ca. Car pour un IdMsg, est il possible d'y mettre plusieurs IP ?
Table IP
idmsg-------ip
12--------192.168.1.1
-----------192.168.1.2
-----------192.152.15.1
15--------15.15.15.15
-----------18.45.45.154
Merci de m'éclairer
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]
Re: Comment faire un vote avec sauvegarde de l'ip ?
Posté : 26 déc. 2007, 15:33
par AB
Bonjour,
Je m'explique, je désire afficher sur mon site un ensemble de message.
Ces messages pourront etre evalué, il y aura un bouton + et un bouton - grace a ces vote je calculerai le ratio.
Chaque message aura un Idmsg.
Un utilisateur ne pourra voter qu'une seule fois, il faut donc que je retienne l'adresse IP
Pouvez vous m'expliquer comment je dois faire pour sauvegarder l'IP et le message auquel l'utilisateur a voté ?
Ce n'est pas la bonne méthode car un IP change d'une visite à l'autre pour un même utilisateur (parfois il peut même changer pour une même visite). Si tu souhaites que les membres ne puissent pas voter plusieurs fois, il faut faire un système d'authentification.
Posté : 26 déc. 2007, 15:37
par zeus
Ou encore, un système de cookie. C'est pas parfait, mais ça a le mérite de ne pas imposer la connexion (qui est un frein à la participation) et qui t'assure qu'il n'y aura qu'un vote par ordinateur (du moins tant que l'utilisateur ne nettoie pas ses cookies, ce qui est rare, ou qui refuse les cookies, ce qui est encore plus rare)
Posté : 26 déc. 2007, 15:43
par Mykeul
Merci,
Je ne compte pas créer de "compte utilisateur".
Je vais donc me pencher vers les cookies (j'y connais rien

)
Vous pouvez m'expliquer comment le cookies fonctionnera ? C'est a dire qu'il y aura un seul cookies pour tout les messages ?
Posté : 26 déc. 2007, 16:31
par AB
Merci,
Je ne compte pas créer de "compte utilisateur".
Je vais donc me pencher vers les cookies (j'y connais rien

)
Vous pouvez m'expliquer comment le cookies fonctionnera ? C'est a dire qu'il y aura un seul cookies pour tout les messages ?
Un cookie par message.
A chaque vote tu envoies le cookie contenant par exemple le titre du message (ou un identifiant spécifique) sur l'ordinateur du visiteur. Pour pouvoir voter tu vérifies que ce cookie ne se trouve pas sur l'ordinateur du visiteur.
Mais comme te l'a indiqué Zeus, il faut que ton application ne soit pas trop sensible, car il suffit d'effacer le cookie pour contourner cette protection et pouvoir voter plusieurs fois. De plus un seul vote sera possible par machine, donc pas optimisé pour les postes multi utilisateurs. Mais bon ça peut suffire pour une bonne approximation si le nombre de votant est conséquent.
Posté : 26 déc. 2007, 16:41
par Mykeul
Mais alors imaginons qu'il y ait 200 messages, l'utilisateur vote 200 fois, il aura 200 cookies ?
Ce n'est pas plus simple de faire avec l'IP meme si celle ci change. A l'heure actuelle, une IP tient au minimum une semaine mise a part le fait qu'on peut rebooter le routeur pour en avoir une nouvelle.
Je veux juste qu'il soit impossible de pouvoir voter plusieurs fois à la suite. Apres je ne pense pas qu'un utilisateur s'amuse a cliquer 25 000 fois ^^
Dans une base de donnée, c'est possible d'avoir, pour un message, plusieurs IP ? (comme indiqué dans mon 1er post)
Posté : 26 déc. 2007, 17:09
par zeus
Je pensais plus faire un unique cookie contenant la sérialisation d'un tableau contenant la liste des tous les messages pour lesquels il a voté
Mais j'aurais du être plus précis dans ma description

Posté : 26 déc. 2007, 17:14
par Mykeul
Ah, ben ca c'est niquel !
Je vais voir ca de plus prés !
Merci

Posté : 26 déc. 2007, 17:54
par AB
M'oui, la méthode que t'indique Zeus est plus propre mais ça m'étonnerais que tu puisse stocker suffisamment d'informations dans un seul cookie pour mémoriser le résultat du vote sur 200 messages par exemple. Il risque d'être plein avant.
Sinon tu peux effectivement générer un identifiant unique (ex : $id = time().$_SERVER['REMOTE_ADDR']; ou simplement $id = microtime(); ) que tu stokeras dans un cookie et que tu reporteras dans une base de donnée pour gérer ton système de vote.
Un exemple de gestion de vote très comparable au tiens ici
http://www.phpfrance.com/forums/voir_su ... -asc-0.php
EDIT En tous cas ne te sert pas uniquement de l'adresse IP pour générer un identifiant car une fois libéré, l'IP peut être réaffecter à un autre visiteur qui lui ne pourrait plus voter

Posté : 26 déc. 2007, 18:38
par zeus
La taille maximale du cookie est de 4ko.
4ko = 4096o donc 4096 caractères.
Imaginons des identifiants de votes dont la longueur moyenne serait 4 chiffres.
Pour chaque chiffre, il y a le séparateur (disons ; ) sauf pour le dernier.
Le nombre de votes possible dans un cookie sera donc
4096 = N*(4+1) - 1
N = (4095/5)
N = 819
Ma solution permet donc de stocker 819 votes ...
Si le système qui lit le cookie le nettoie en enlevant les votes qui sont terminés (par exemple), je pense que cette solution est fiable.
Il faut, par contre, stocker les résultats des votes en BdD, comme le dit AB
cookie
Posté : 01 janv. 2008, 11:35
par karenma
bonjour
j'ai essayé de comprendre l'histoire des cookies mais c pas évident
j'ai pas très bien compris concrètement comment il faut faire pour faire tout ce que vous avez expliqué
Merci d'avance pour votre réponse
Posté : 01 janv. 2008, 18:33
par h0_noMan
Tu peux bloquer sur le HOSTNAME.
Il y a beaucoup moins d'utilisateur qui savent changer leur hostname que leur IP publique.
Re: cookie
Posté : 01 janv. 2008, 19:00
par AB
bonjour
j'ai essayé de comprendre l'histoire des cookies mais c pas évident
j'ai pas très bien compris concrètement comment il faut faire pour faire tout ce que vous avez expliqué
Merci d'avance pour votre réponse
La solution avec cookie telle que l'a indiquée Zeus fonctionne sans identifiant utilisateur mais avec un identifiant de sujet pour lequel on a voté. Pour chaque vote d'un visiteur, on cherche si le cookie existe et si oui s'il contient l'identifiant du sujet. Si le cookie est inexistant, ou s'il existe mais ne contient pas l'identifiant du sujet, on autorise le visiteur à voter pour ce sujet et l'on ajoute ensuite l'identifiant du sujet dans le cookie.
Par exemple après 3 votes le contenu du cookie sera $_COOKIE['votes'] = '25463;351;7841' et il indiquera que le visiteur a déjà voté pour les sujets dont les identifiants sont : 25463, 351 et 7841