je remarquai que pour le vote en œuvre SO une méthode XHR qui des messages affichés sur un contrôleur de messages et envoie le type d'ID de poste et vote par l'URL, en plus d'un paramètre fkey
est envoyé, par exemple:Stratégie pour un vote utilisateur unique tel que Stackoverflow?
http://stackoverflow.com/posts/1/vote/2
Je suis Je vais mettre en place une technique similaire, je me demande quelle logique je pourrais utiliser pour éviter le double vote par le même utilisateur et empêcher le spam, en plus de la logique globale lors de la mise en œuvre de ce.
Le schéma de la table, je vais être de les stocker:
thread_id user_id vote_type
2334 1 2
Jusqu'à présent, je suis venu avec ces points de balle:
- assurer que l'utilisateur est connecté
- faire en sorte que un ID de poste valide et un type de vote valide sont envoyés
- assurez-vous qu'après le POST, l'utilisateur n'a pas déjà voté
- le code qui crée le hachage ne peut pas contenir d'informations dynamiques telles que l'agent utilisateur, car un utilisateur peut être sur un autre navigateur, un OS différent, non?
Mise à jour:
"SO utilise probablement le cookie de connexion pour identifier l'utilisateur." - Andrew
Est-ce que quelqu'un pourrait démontrer comment cela serait fait, ou en d'autres termes fournir plus précisément un exemple de la façon dont le fkey
, qui est une chaîne alphanumérique de 32 bits, est généré?
Question:
- depuis que je ne suis pas l'envoi de l'identifiant d'utilisateur réel partout avec mon code XHR, est-ce que cela signifie que je dois mettre à jour mon schéma de table afin que je puisse enregistrer le
fkey
au lieu de dire , leuser_id
? Lefkey
devra probablement être unique à chaque utilisateur, et donc je peux probablement demander s'il y a une ligne dans la table de vote qui a un fkey de quoi que ce soit.
Apprécierait des conseils ou un aperçu sur quiconque a mis en œuvre une technique similaire.
Pourquoi n'êtes-vous pas l'envoi de l'identifiant d'utilisateur réel n'importe où avec votre code XHR? –
bien, j'ai remarqué que SO ne l'utilisait pas, et peut-être pour une bonne raison .. on pourrait créer un formulaire personnalisé, mettre un champ id d'utilisateur avec une valeur, et le poster et ce serait une demande valide, non? Cependant, si vous utilisez quelque chose comme le 'fkey', il y a de fortes chances que personne ne puisse le programmer inversement pour obtenir le même hash basé sur l'utilisateur, c'est pourquoi je pense que SO utilise cette méthode. –
SO utilise probablement le cookie de connexion pour identifier l'utilisateur. J'ai vérifié avec Firebug, et les cookies sont envoyés. – Jess