2011-10-21 3 views
11

ठीक है, इसलिए मैं अपवॉट/डाउनवोट कार्यक्षमता वाली वेबसाइट बनाने की योजना बना रहा हूं। शेष साइट के बारे में बहुत अधिक जानकारी प्राप्त किए बिना, उपयोगकर्ता उस सामग्री को सबमिट करने में सक्षम होंगे जिस पर मतदान किया जा सकता है (उस अर्थ में reddit के समान- और केवल उस अर्थ में)। इस वेबसाइट पर केवल "खाते" प्रशासकों और मॉडरेटर के लिए होंगे, जो मुझे मुख्य प्रश्न पर लाता है:वेबसाइट पर upvotes/downvotes को लागू करने का सबसे अच्छा तरीका?

मैं प्रत्येक पोस्ट प्रति उपयोगकर्ता प्रति पोस्ट, जितना संभव हो सके, बिना किसी खाते के वोटों को सीमित कैसे कर सकता हूं?

साइट भी Django और MySQL का उपयोग कर बनाया जाएगा, जो मुझे मेरे दूसरे प्रश्न के लिए लाता है: एक MySQL डेटाबेस में

मैं कैसे स्टोर करते हैं वोट? क्या मुझे प्रत्येक पोस्ट में किसी फ़ील्ड में एक पूर्णांक स्टोर करना चाहिए, या यह प्रति पंक्ति एक वोट के साथ एक टेबल होना चाहिए? मेरा अनुमान निश्चित रूप से पूर्व है, लेकिन मैंने पहले कभी ऐसा कुछ नहीं किया है, इसलिए मैं बस यह सुनिश्चित करना चाहता हूं।

क्या कोई मुझे उस कार्यक्षमता को कार्यान्वित करने के सामान्य दिशा में इंगित कर सकता है जो मैं चाहता हूं? मैं इसके बारे में सोच रहा हूं, और मैंने सत्र चर, कुकीज़, और/या आईपी पते का उपयोग कर तरीकों के बारे में सोचा है। मुझे पता है कि खातों के बिना कोई समाधान सही नहीं है, लेकिन मुझे बस ऐसा कुछ चाहिए जो लोगों को मतभेदों से रोकने के लिए पर्याप्त रूप से काम करता है। मैं अनजान हूं, इसलिए सभी मदद की सराहना की जाती है।

+0

आपको वोट गिनती को अद्यतन करने वाले समवर्ती मुद्दों की वजह से कम से कम अपवॉट और डाउनवॉट स्टोर करना चाहिए। – fredley

+3

आईपी पते के माध्यम से सीमित करके आप संभावित वोटों का एक बड़ा हिस्सा खो रहे हैं। कई स्कूलों, व्यवसायों और यहां तक ​​कि छात्रावास कई उपयोगकर्ताओं के लिए 1 बाहरी आईपी पते का उपयोग करते हैं। उपयोगकर्ता खातों के बिना सिस्टम को लागू करने का कोई अच्छा तरीका नहीं है। क्योंकि 100 कर्मचारियों को 1 व्यक्ति वोट देने के लिए सीमित होना गलत होगा, जैसे कि कोई आईपी सीमा नहीं है। – JClaspill

+0

@JClaspill मुझे अपने प्रश्न में इसका उल्लेख करना चाहिए था, लेकिन वेबसाइट वास्तव में मेरे विश्वविद्यालय के छात्रों के लिए लक्षित है (मैं भी उनके लिए विशेष रूप से पोस्टिंग सामग्री बनाने की योजना बना रहा हूं)। संभावना है कि 28,000+ छात्रों का मेरा विश्वविद्यालय हर किसी के लिए एक ही आईपी पता का उपयोग करता है? – GRardB

उत्तर

7

बड़ी कठिनाई के साथ।

कारण अन्य खातों का उपयोग करने के कारण अपवर्त/डाउनवोट-इन उपयोग खातों का कारण यह है कि उपयोगकर्ता को गारंटी देने के लिए कोई अन्य तरीका नहीं है कि एक ही चीज़ पर दो बार वोट नहीं दे पाएगा।

जानकारी आप के लिए उपलब्ध है कि "संकीर्ण" के इस उपयोगकर्ता से पहले है मतदान किया है अपने दायरे चाहिए:

  • उनके आईपी पते
  • उनके यूए स्ट्रिंग (आगे के बाद क्षेत्र संकीर्ण करने के लिए इस्तेमाल किया जा सकता पहले)
  • है कि आप अपने ब्राउज़र

आप स्पष्ट रूप से देख सकते हैं पर संग्रहीत कोई भी कुकी,/सत्र डेटा, इस जानकारी के सभी परिवर्तन के अधीन है और इसमें से अधिकांश कर सकते हैं एक दुर्भावनापूर्ण उपयोगकर्ता द्वारा इच्छानुसार नियंत्रित किया जाना चाहिए। यदि आप दुर्भावनापूर्ण उपयोगकर्ताओं से खुद को सुरक्षित रखना चाहते हैं, तो उपयोगकर्ता खातों का सबसे अच्छा तरीका है।

यदि आप केवल दो बार मतदान करने वाले वैध उपयोगकर्ताओं से खुद को सुरक्षित रखना चाहते हैं, तो बस आईपी पते का उपयोग करें - वे लगातार पर्याप्त हैं कि औसत उपयोगकर्ता कम समय में दो बार मतदान नहीं कर पाएंगे।

मुझे खेद है कि मैं अधिक सहायता नहीं कर सकता, जहां तक ​​मुझे पता है कि यह अभी भी उन महान अनुत्तरित प्रश्नों में से एक है। बहुत से लोग सैकड़ों अलग-अलग कारणों से मिलने वाले पिछले आगंतुक से मिलने वाले समान या अलग होने की गारंटी देने में सक्षम होना चाहते हैं, लेकिन वर्तमान तकनीक का उपयोग करना संभव नहीं है।

+0

अभी भी 6 साल बाद संभव नहीं है, हां। ब्राउज़र फिंगरप्रिंटिंग एक तकनीक है जिसका आप उपयोग कर सकते हैं, लेकिन यह गारंटी के पास कहीं भी नहीं है और दुर्भावनापूर्ण उपयोगकर्ता के रूप में बाईपास करने के लिए भी बहुत आसान है।उपयोगकर्ता खाते अभी भी जाने का रास्ता हैं। –

0

स्टोर मतों के तालिका:

id | post_id | vote_value (+/-1) | ip 

चेक इस जब इस आईपी जाँच करने के लिए पोस्टिंग इस प्रश्न पर पहले पोस्ट नहीं किया है। सही नहीं है, लेकिन बहुत अच्छा है।

किसी पोस्ट के लिए वोट खोजने के लिए post_id पर दिए गए इस संदेश को vote_value पर कॉल करें।

0

यह बस एक बार से अधिक मतदान से उपयोगकर्ताओं को सीमित करने के लिए सबसे अच्छा तरीका कहें आईपी (द्वारा ट्रैक करने के लिए यह सोचते हैं आप के लिए लॉग इन करें और एक खाता के लिए उपयोगकर्ता के लिए मजबूर नहीं करना चाहती है। कुकीज़ आसानी से साफ किया जा सकता या उपयोगकर्ता सिर्फ आईपी ट्रैकिंग PHP का उपयोग करें और उन्हें एक DB में स्टोर में अपने ब्राउज़र को बदल सकता है।

देखो। http://php.net/manual/en/function.getenv.php

3

मैं अत्यधिक की समस्याओं को कम करने के लिए उपयोगकर्ता खातों का उपयोग करने की सिफारिश करेंगे। का प्रयोग IPAddress एक नहीं है आसान काम। सरल उदाहरण लें कुछ कंपनियां केवल बाहरी दुनिया में एक आईपी एड्रेस प्रदान करती हैं। इस मामले में आपके समुदाय के पास उचित वितरण नहीं होगा और लोग आपके मतदान प्रणाली पर सवाल उठा सकते हैं। लेकिन अगर आप उपयोगकर्ता खाते प्रणाली के साथ जाने का फैसला किया है, तो आप कुछ इस तरह का पालन कर सकते हैं:

post_table 
+------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+------------+------------------+------+-----+---------+----------------+ 
| postId  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| userId  | int(10) unsigned | NO | MUL | NULL |    | 
| postTime | bigint(20)  | NO |  | NULL |    | 
| post  | text    | NO |  | NULL |    | 
| upVote  | int(11)   | YES |  | 0  |    | 
| downVote | int(11)   | YES |  | 0  |    | 
+------------+------------------+------+-----+---------+----------------+ 

user_of_website 
+--------------+------------------+------+-----+---------+----------------+ 
| Field  | Type    | Null | Key | Default | Extra   | 
+--------------+------------------+------+-----+---------+----------------+ 
| userId  | int(10) unsigned | NO | PRI | NULL | auto_increment | 
| userName  | varchar(50)  | NO |  | NULL |    | 
| numPosts  | int(10) unsigned | NO |  | 0  |    | 
| postsCount | int(11)   | NO |  | 0  |    | 
+--------------+------------------+------+-----+---------+----------------+ 

इसके अलावा, आप जहां सकारात्मक से केवल एक वोट स्तंभ और नकारात्मक प्राप्त घटा है एक अलग मॉडल का उपयोग कर सकते हैं।

आशा है कि इससे मदद मिलेगी।

+1

इस मॉडल के साथ एक उपयोगकर्ता दो बार एक पोस्ट ऊपर उठा सकता है। – Ced

0

पुराना सवाल लेकिन मैं एक शॉट ले जाऊंगा।

आखिरकार, दुर्भावनापूर्ण उपयोगकर्ताओं के खिलाफ मतदान वैधता के किसी भी स्तर का प्रयास करने वाले किसी भी सिस्टम को कैप्चा (या कुछ बॉट-रोकथाम समकक्ष) का लाभ उठाना होगा, लेकिन वास्तविक खाता निर्माण आवश्यक नहीं है। एक बार जब उपयोगकर्ता कैप्चा के माध्यम से अपने मानव-ज्ञान को सत्यापित करता है, तो अपने कंप्यूटर पर एक कुकी स्टोर करें जो उसके आईपी पते डेटा को एन्कोड करता है। जब तक उपयोगकर्ता उस कुकी को बनाए रखता है, तब तक वह इसके साथ एक कुंजी के रूप में मतदान कर सकता है, और आप कुंजी (आईपी पता) को पहचानकर्ता के रूप में उपयोग कर सकते हैं। यदि कुकी किसी भी तरह से हटा दी जाती है, तो आप उसे कैप्चा के माध्यम से बस पुनः प्रमाणित करेंगे और अपना आईपी पता पुनः प्राप्त करेंगे।

बेशक, एक दुर्भावनापूर्ण उपयोगकर्ता आसानी से आईपी को धोखा दे सकता है, लेकिन कैप्चा उसे एक समय में कुछ से अधिक करने से रोक देगा, इसलिए यह केवल एक खाता-आधारित नेटवर्क बनाने पर दुर्भावनापूर्ण उपयोगकर्ता के रूप में विघटनकारी होगा कई नकली खाते।

संबंधित मुद्दे