सबसे पहले, अगर कोई लॉग इन है तो बस ट्रैक करें। उसके बाद, हम "मुझे याद रखें" सुविधा का ख्याल रखेंगे।
यह जानने के लिए कि कोई लॉग इन है या नहीं, तो आप बस $_SESSION
सरणी देखें। वहां जो कुछ भी है वह है क्योंकि आप इसे पहले वहां रखते हैं। इसलिए, लॉगिन फॉर्म को संसाधित करते समय, यदि उपयोगकर्ता नाम & पासवर्ड सही है, तो आप उपयोगकर्ता नाम, उपयोगकर्ता आईडी या सत्र में जो कुछ भी संग्रहीत करते हैं ($_SESSION['username'] = $username;
)।
जब भी उपयोगकर्ता किसी भी पृष्ठ को लोड करता, तो आप सिर्फ जाँच
if (isset($_SESSION['username'])) {
// $_SESSION['username'] is logged in
} else {
// nobody is logged in
}
($_SESSION
में पासवर्ड स्टोर करने के लिए वास्तव में, सुरक्षा उद्देश्यों के लिए, यह बेहतर है इसे कहीं भी दुकान नहीं करने के अलावा में टुकड़ों में बांटा कोई ज़रूरत नहीं है डेटाबेस)।
अब, "मुझे याद रखें" सुविधा ... सबसे पहले, कुछ विचार:
- तो आप यह सुनिश्चित करें कि कुकी आवेदन करने के लिए भेजा नहीं किया गया है करने की आवश्यकता है कोई भी उपयोगकर्ता, अपने ब्राउज़र की कुकी संशोधित कर सकते हैं साथ छेड़छाड़।
- उपयोगकर्ता इसे सार्वजनिक कंप्यूटर (पुस्तकालयों या अन्य) पर देख सकते हैं, इसलिए आपको इसे अमान्य करने के लिए एक सिस्टम की आवश्यकता है।
- यदि कोई उपयोगकर्ता आपके एप्लिकेशन से लॉग आउट करता है, तो उसे याद रखने वाली कुकी को मिटा दिया जाना चाहिए।
पहला बिंदु के लिए, कल्पना है कि कुकी आप के लिए "याद" जा उपयोगकर्ता (बहुत असुरक्षित !!) के उपयोगकर्ता नाम की दुकान पर। इसका अर्थ यह है कि यदि कोई उपयोगकर्ता सामग्री के लिए वेब एप्लिकेशन के लिए कुकी बनाता है, तो आपके ऐप को लगता है कि उस कंप्यूटर में उपयोगकर्ता जो याद किया जाता है, इसलिए इस हमलावर तक पहुंच प्रदान करें जैसे कि वह जो था।तो, हमें कुकी को कुछ तरीके से क्रिप्ट/हैश करना होगा।
दूसरे बिंदु पर, कुछ कंप्यूटरों पर "मुझे याद रखें" को अमान्य कर, हम किसी भी तरह से पासवर्ड का उपयोग करेंगे। यदि कुछ उपयोगकर्ता उन सभी कंप्यूटरों को अमान्य करना चाहते हैं जहां उन्होंने "मुझे याद रखें" चेकबॉक्स की जांच की हो, तो उसे बस अपना पासवर्ड बदलना होगा। इसका मतलब यह भी है कि यदि वह अपना पासवर्ड बदलता है, तो उसी सटीक कारण के लिए, उसके खाते के लिए सभी सहेजे गए लॉग इन अमान्य हो जाएंगे। लेकिन माफ की तुलना में बेहतर सुरक्षित ...
तो, जब आप लॉगिन करते हैं और उपयोगकर्ता नाम और पासवर्ड सही होता है, और सत्र में उपयोगकर्ता नाम सहेजने के अलावा, "मुझे याद रखें" विकल्प चेक किया जाता है, तो आप एक स्टोर करते हैं उपयोगकर्ता द्वारा भेजी गई कुकी में उपयोगकर्ता नाम & पासवर्ड (और कुछ नमक यदि आप करेंगे) का हैश। कुकीज के माध्यम से कुकी में "लॉग इन" करने का प्रयास करने के लिए कौन सा उपयोगकर्ता कुकीज में "लॉग इन" करने का प्रयास कर रहा है, और कुकी के उपयोगकर्ता को हैश के साथ कुकी में उपयोगकर्ता नाम & पासवर्ड की जांच करने के लिए सादे पाठ (या एक उलटा तरीके से क्रिप्ट) में उपयोगकर्ता को स्टोर करने की आवश्यकता है। उपयोगकर्ता नाम & डेटाबेस में पासवर्ड। यदि वह चेक सही है, तो आप उपयोगकर्ता नाम को सत्र में संग्रहीत करते हैं और अब इस उपयोगकर्ता की कुकी (कम से कम इस सत्र के लिए) की जांच न करें।
तो, संपूर्ण रूप से अपने कोड इस प्रकार दिखाई देंगे:
login.php
if (check_login($_POST['username'], $_POST['password'])) {
// login correct
$_SESSION['username'] = $_POST['username'];
if (isset($_POST['remember_me'])) {
// we hash the password because we **NEVER** store it in plain text anywhere
// so when we would like to check if the cookie value is correct, we will not
// be able to do so if the hash in the cookie was done from the plaintext
// password.
$value = sprintf('%s:%s', $_POST['username'], md5($_POST['username'].hash_password($_POST['password'])));
setcookie('rememberme', $value);
}
redirect('/your/home/page.php'); // view Post/Redirect/Get design pattern
} else {
// login incorrect, show error message and whatever...
}
हर php फ़ाइल की शुरुआत में (या बेहतर, एक शामिल फ़ाइल में अपने अनुप्रयोग bootstrap करने के लिए)
if (isset($_SESSION['username'])) {
// $_SESSION['username'] is logged in, proceed as you wish
} else if (isset($_COOKIE['rememberme'])) {
// this user has checked the remember me feature some time ago in a previous login.
// let's check if it is valid.
list($username, $hash) = explode(':', $_COOKIE['rememberme']);
// we need to get the password hash stored for this user (remember you **NEVER** store passwords in plain text
$pwd_hash = obtain_password_hash_from_username($username);
if ($hash == sprintf('%s:%s', $username, md5($username.$pwd_hash))) {
// yeah, the user remembered is correct. We'll save it to the session to not do this shit again
$_SESSION['username'] = $username;
} else {
// the cookie value is not correct so maybe an attacker is trying to fool us,
// or the user changed his password. Whatever it is, we remove the cookie
// because it's no longer valid
setcookie('rememberme', '', time() - 3600);
}
} else {
// this user is neither logged in nor "remembered"
}
विधि हैश करने के लिए उपयोगकर्ता पासवर्ड आप पर निर्भर है। आप सादे एमडी 5 या शा, नमकीन एमडी 5 या शा (बेहतर) या कुछ समय लेने वाली विधि जैसे ब्लाफिश (अनुशंसित) पसंद कर सकते हैं। कुकी हैश करने के लिए मैंने सादा एमडी 5 का उपयोग किया है, लेकिन आप जल्दी वर्णित किसी भी विधि का चयन कर सकते हैं।
मुझे लगता है कि यह सब कुछ है।
संभवतः उपयोगी: [PHP के साथ उपयोगकर्ता सदस्यता] (http://net.tutsplus.com/tutorials/php/user-membership-with-php/) – drudge
@ प्रशांत: कृपया मुझे [email protected] पर मेल करें, निजी में चर्चा करने की जरूरत है। इसे पढ़ने के बाद भी इसे हटा दें। –