Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
📘 Lesson  ·  Lesson 40

Login & Registration System

हम क्या बना रहे हैं

Login system के चार हिस्से हैं: users table, registration (account बनाना), login (verify करके session शुरू करना), और logout। पूरे में passwords hash होते हैं और queries prepared statements इस्तेमाल करती हैं। यह standard, सुरक्षित pattern हर असली site अपनाती है।

💡 इसे सुरक्षित रखने वाले दो नियम: passwords को password_hash से hash कीजिए, और हर query के लिए prepared statements इस्तेमाल कीजिए।

users table

CREATE TABLE users (
    id       INT AUTO_INCREMENT PRIMARY KEY,
    email    VARCHAR(80) UNIQUE NOT NULL,
    password VARCHAR(255) NOT NULL
);

UNIQUE email duplicate accounts रोकता है। Password column लंबा (255) है क्योंकि hash असली password से बहुत लंबा होता है।

Registration

<?php
  $email = trim($_POST["email"]);
  $pass  = $_POST["password"];
  $hash  = password_hash($pass, PASSWORD_DEFAULT);

  $sql = "INSERT INTO users (email, password) VALUES (?, ?)";
  $stmt = $pdo->prepare($sql);
  $stmt->execute([$email, $hash]);
  echo "Account created";
?>
Account created

Password save करने से पहले hash होता है, और query placeholders इस्तेमाल करती है। Database कभी असली password नहीं देखता।

Login

<?php
  session_start();
  $email = trim($_POST["email"]);
  $pass  = $_POST["password"];

  $stmt = $pdo->prepare("SELECT id, password FROM users WHERE email = ?");
  $stmt->execute([$email]);
  $user = $stmt->fetch(PDO::FETCH_ASSOC);

  if ($user && password_verify($pass, $user["password"])) {
      $_SESSION["user_id"] = $user["id"];
      echo "Login success";
  } else {
      echo "Invalid email or password";
  }
?>
Login success

हम email से user ढूँढते हैं, फिर password_verify password को store hash से जाँचता है। सफल होने पर user id session में save करते हैं।

Page सुरक्षित करना

<?php
  session_start();
  if (empty($_SESSION["user_id"])) {
      header("Location: login.php");
      exit;
  }
  echo "Welcome to your dashboard";
?>

जिस page को logged-in user चाहिए वो पहले session जाँचता है। अगर user_id न हो, तो login page पर redirect करता है।

Logout

<?php
  session_start();
  session_unset();
  session_destroy();
  header("Location: login.php");
?>

Logout session साफ़ करता है ताकि user पहचाना न जाए, फिर उसे login page पर वापस भेजता है।

आम गलतियाँ

  • Plain passwords store करना। register पर हमेशा password_hash, login पर password_verify।
  • Input से SQL बनाना। injection रोकने को prepared statements इस्तेमाल कीजिए।
  • UNIQUE email न होना। इसके बिना duplicate accounts घुस जाते हैं।
  • Protected pages पर session न जाँचना। कोई भी उन्हें सीधे खोल सकता है।

सारांश

  • Login system = users table + register + login + logout।
  • Passwords को password_hash से hash कीजिए; password_verify से जाँचिए।
  • Login state session में रखिए; हर protected page पर जाँचिए।
  • सारी database queries के लिए prepared statements इस्तेमाल कीजिए।
  • Duplicates रोकने को email column UNIQUE बनाइए।

आगे, hashing गहराई से समझिए password hashing से, या state संभालिए sessions और cookies से।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

Login system के मुख्य हिस्से क्या हैं?
चार हिस्से: accounts रखने को users table, hashed password के साथ account बनाने को registration, password verify करके session शुरू करने को login, और session ख़त्म करने को logout। Pages सुरक्षित करना session जाँचता है।
Passwords सुरक्षित रूप से कैसे store होते हैं?
कभी plain text में नहीं। register करते समय password_hash() और login पर password_verify() इस्तेमाल कीजिए। Database सिर्फ़ hash रखता है, तो leak असली passwords उजागर नहीं करता।
Site logged-in user को कैसे याद रखती है?
Session से। सफल login के बाद आप $_SESSION["user_id"] जैसा कुछ set करते हैं। हर protected page content दिखाने से पहले जाँचता है कि यह session value मौजूद है।
Duplicate email registrations कैसे रोकूँ?
Database में email column को UNIQUE बनाइए, और insert से पहले मौजूदा email जाँचिए। यह दो accounts को एक ही email share करने से रोकता है।
Login code में prepared statements क्यों?
Login और registration ऐसा user input संभालते हैं जो database को छूता है। Prepared statements उस input को SQL से अलग रखते हैं, SQL injection रोककर — किसी भी auth code के लिए ज़रूरी।
← Back to PHP Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicContact Form with Email आपकी प्रगति: 40 / 50 (80%) · Lesson 41 / 50 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें