आप मूल रूप से कुछ ही विकल्प हैं:
1) एक भी अद्वितीय पहचानकर्ता मालूम होता है यादृच्छिक है बनाएँ और अपने डेटाबेस में संग्रहीत जिसके साथ यह
2 से मेल खाती है उपयोगकर्ता नाम) एक यादृच्छिक पासवर्ड जनरेट करें और शामिल लिंक में उपयोगकर्ता आईडी और पासवर्ड डेटाबेस में पासवर्ड
3) उपयोगकर्ता पहचानकर्ता को एन्क्रिप्ट करने के लिए एक तरह से हैशिंग फ़ंक्शन (md5, sah1, आदि) और एक गुप्त पहचानकर्ता का उपयोग करें। आपको अपने डेटाबेस में एन्क्रिप्टेड उपयोगकर्ता पहचानकर्ता को स्टोर करने की आवश्यकता नहीं है।
विकल्प 1 कठिन है क्योंकि आपको यह देखने के लिए डेटाबेस की जांच करने की चिंता करनी है कि कुंजी पहले से मौजूद है या नहीं। हालांकि, यह अच्छा है कि यूआरएल में उपयोगकर्ता नाम सक्रिय नहीं है।
यदि आप भविष्य में उपयोगकर्ता जानकारी (शायद न्यूनतम पर एक पासवर्ड) स्टोर करने के लिए कुछ प्रकार के डेटाबेस का उपयोग करने जा रहे हैं, तो आप विकल्प 2 के साथ जा सकते हैं। इसमें एक और कॉलम जोड़ने के लिए बहुत कुछ नहीं लगता है आपका डेटाबेस ईमेल भेजते समय, उपयोगकर्ता नाम और पंक्ति के लिए किसी अन्य कॉलम में उपयोगकर्ता नाम और $ key = sha1 (रैंड (1, 99 999)। $ उपयोगकर्ता नाम) जैसे कुछ सहेजें। फिर आपका लिंक इस तरह दिखता है: http://you.com/activation.php?user= $ उपयोगकर्ता नाम & कुंजी = $ कुंजी। Activation.php में आप यह देखने के लिए जांचते हैं कि कुंजी डेटाबेस में संग्रहीत मान के बराबर है या नहीं।
यदि आप अपने डेटाबेस में कम संग्रहण स्थान का उपयोग करना चाहते हैं, तो विकल्प 3 काम करेगा। आप गुप्त पहचानकर्ता के रूप में $ key = sha1 ($ mysecret। $ उपयोगकर्ता नाम) जैसे कुछ का उपयोग कर सकते हैं। कुछ अजीब प्रयोग करें कि केवल आप $ mysecret जैसे 'aaafj_my_secret_adfaf' के रूप में जानते हैं। विकल्प 2 में उसी प्रकार के यूआरएल का प्रयोग करें।हालांकि, क्योंकि आप केवल $ उपयोगकर्ता नाम पर आधारित $ कुंजी उत्पन्न कर सकते हैं, आपको इसे स्टोर करने की आवश्यकता नहीं है। तो जब आप activation.php में प्रसंस्करण कर रहे हैं, तो यह देखने के लिए जांचें कि sha1 ($ mysecret। $ _GET [उपयोगकर्ता नाम]) == $ _GET [key]। यदि ऐसा होता है, तो आप जानते हैं कि आपके पास सही उपयोगकर्ता है। सैद्धांतिक रूप से, पर्याप्त पंजीकरण के साथ, कोई $ mysecret के लिए अपना मूल्य समझ सकता है और सक्रियण कुंजी भी उत्पन्न कर सकता है। हालांकि, आप निश्चित रूप से उन अरबों या अधिक पंजीकरणों को नोटिस करेंगे जो इससे पहले कि वे गणना कर सकें, इसकी गणना करना शुरू हो जाएगा। आवश्यक सक्रियण की संख्या हैशिंग फ़ंक्शन के मुख्य आकार पर आधारित है। Sha1 (160 बिट) बनाम md5 (128 बिट) का उपयोग करें ताकि आपके $ mysecret मान का अनुमान लगाना मुश्किल हो।
स्रोत
2009-05-18 04:34:21
टकराव का कोई मौका नहीं है कि आप यूआरएल में उपयोगकर्ता आईडी भी जोड़ते हैं और जांचते हैं कि वे दोनों मेल खाते हैं। – Eli
@ एली, एक मौका है, क्योंकि पात्रों के कुछ संग्रह एक ही हैश स्ट्रिंग के लिए हैश करते हैं। हालांकि मौका काफी नगण्य है (लेकिन अभी भी वहां)। – alex
एह, मैं उपयोगकर्ता को प्राथमिक कुंजी जानकारी प्रकट करने का प्रशंसक नहीं हूं। लेकिन यह एक अच्छा विचार है, एली। तो कुंजी = $ जेनरेट की गई और आईडी = $ uid –