Login & Registration System
हम क्या बना रहे हैं
Login system के चार हिस्से हैं: users table, registration (account बनाना), login (verify करके session शुरू करना), और logout। पूरे में passwords hash होते हैं और queries prepared statements इस्तेमाल करती हैं। यह standard, सुरक्षित pattern हर असली site अपनाती है।
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";
?>
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";
}
?>
हम 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 के मुख्य हिस्से क्या हैं?
Passwords सुरक्षित रूप से कैसे store होते हैं?
password_hash() और login पर password_verify() इस्तेमाल कीजिए। Database सिर्फ़ hash रखता है, तो leak असली passwords उजागर नहीं करता।Site logged-in user को कैसे याद रखती है?
$_SESSION["user_id"] जैसा कुछ set करते हैं। हर protected page content दिखाने से पहले जाँचता है कि यह session value मौजूद है।