2010-04-21 4 views
3

J'ai lu sur stackoverflow sur la création de systèmes de vote en PHP qui minimisent les abus/votes multiples du même utilisateur, mais je n'ai pas trouvé la réponse à ma question.Système de vote PHP avec des sessions?

J'ai une application où les utilisateurs n'ont pas besoin de s'inscrire pour voter ou «aimer» une entrée. Évidemment, je veux minimiser les abus et je ne veux pas limiter les votes par adresse IP car certaines organisations (la mienne incluse) utilisent des adresses IP partagées. Je n'ai jamais utilisé de sessions dans un système non authentifié auparavant, mais comme cette application est centrée sur les votes d'entrée (utilisés pour une valeur de divertissement pure, mais je voudrais quand même minimiser les abus), je me demandais si cette approche travailleraient et s'il y avait des inconvénients tels que des implications de performance, et s'il est même possible d'utiliser des sessions de cette façon:

  • commencer une session lorsque le site est chargé
  • permettre un vote par article par session

Si c'est une mauvaise idée, mes options alternatives seraient de permettre un nombre raisonnable de votes par adresse IP (disons 25), ou de mettre une limite de temps entre les votes de la même adresse IP.

Qu'est-ce que vous recommandez/que pensez-vous qui serait le plus ennuyeux pour un utilisateur? Redémarrer un navigateur, attendre 5 minutes entre les votes ou effacer les cookies?

+0

Je recommande de ne pas utiliser les résultats à d'autres fins que le divertissement. – gnud

Répondre

1

Seule la session est une mauvaise idée, car si vous fermez le navigateur et que vous revenez, vous pourrez voter. Vous pouvez utiliser la session comme "aide". La meilleure option est d'utiliser la limitation ip. En outre, vous pouvez utiliser des cookies, mais ce n'est encore qu'une "aide", car vous pouvez nettoyer les cookies du navigateur. Je vous suggère d'utiliser la limitation ip comme vous l'avez dit, une ip peut voter 25 fois et utiliser des cookies pour empêcher un ordinateur de voter plus d'une fois. Donc, si un utilisateur veut voter plus d'une fois, il peut supprimer un cookie, mais il ne pourra pas voter plus de 25 fois.

5

Il n'y a vraiment aucun moyen de faire un système de vote « sérieux » sans authentification de l'utilisateur, toutes les autres options ont des défauts:

    fin
  • sessions lorsque vous fermez le navigateur, donc rouvrir juste et you'r frais
  • les cookies sont votre meilleur coup, mais ils peuvent être effacés ou même refusé
  • adresses iP ne sont pas fiables et/ou non applicable
+0

Les sessions ne se terminent pas automatiquement lorsque le navigateur est fermé. Vous pouvez faire des sessions qui durent toute une vie (ou au moins jusqu'à ce que le cookie soit supprimé). À cet égard, ils sont égaux à votre option n ° 2, car les sessions sont réalisées à l'aide de cookies. – deceze

+0

Le se termine automatiquement lorsque le navigateur est fermé, par comportement par défaut. Vous pouvez changer cela, mais vous avez le même problème avec les cookies. Les sessions fonctionnent sans cookies. –

1

Je suis d'accord avec kemp que les cookies est le meilleur choix . En outre, les sessions utilisent également des cookies - la différence est que le cookie de session est supprimé lorsque le navigateur est fermé, "simple" cookie - quand il expire, ce qui est "mieux" dans ce cas. Si vous parlez d'adresses IP, les utilisateurs peuvent utiliser des proxys pour contourner le «filtrage IP». Lorsque le vote se termine, quelqu'un peut passer en revue les résultats pour voir s'il y a quelque chose de suspect (comme 100 votes d'adresse IP unique en 5 minutes) - cela aiderait à obtenir des résultats plus véridiques.

+1

Pourquoi tout le monde dit que les sessions se terminent lorsque le navigateur est fermé? C'est un non-sens. Cela dépend du type de session/cookie utilisé. – deceze

+0

Eh bien, je dis cela en partie parce que je efface les cookies lorsque je ferme mon navigateur, et encourage les autres à faire de même. – gnud

+1

deceze, c'est parce que c'est le comportement * standard * PHP, lors de l'utilisation 'session_start()' – binaryLV

0

Vous pouvez utiliser à la fois des cookies et un mécanisme de cache de serveur comme apc/memcached. Stocker les résultats du vote dans le cookie et dans le cache apc en utilisant le même nom de clé/cookie, et vérifier l'existence des deux.Si le cookie est supprimé mais que la clé apc existe toujours, vous savez que quelqu'un tente de re-voter, et vous pouvez simplement réinitialiser le cookie et augmenter la durée de vie de la valeur du cache de l'apc.

Ce n'est pas une preuve à l'épreuve des balles, mais en l'absence d'une base de données, je pense que c'est une bonne solution. Gardez à l'esprit que si le serveur est à court de RAM, il videra le cache apc.

+0

juste par curiosité, pourquoi le vote à la baisse? –

Questions connexes