Login system inaruhusu watumiaji:

Kuingia kwenye website au application.

Kudhibiti access kwa pages maalum.

Kuongeza security kwa password hashing na PDO prepared statements.

Misingi muhimu ya secure login:

PDO + Prepared Statements – kuzuia SQL Injection.

Password hashing – salama zaidi kuliko password plain text.

Session management – kudhibiti logged-in users.

Error handling – usiweke errors za kiufundi kwa user.

⚙️ 2. Database Setup

Tuna table ya users kama ifuatavyo:

CREATE DATABASE user_system;

USE user_system;

CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);


💡 Maelezo:

UNIQUE constraints kwa username na email.

Passwords zinapaswa hashed.

⚙️ 3. Database Connection (config.php)
<?php
$dsn = "mysql:host=localhost;dbname=user_system;charset=utf8mb4";
$username = "root";
$password = "";

try {
$pdo = new PDO($dsn, $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
die("❌ Connection failed: " . $e->getMessage());
}
?>

🔑 4. Login Form na Authentication (login.php)
<?php
session_start();
include 'config.php';

if($_SERVER['REQUEST_METHOD'] === 'POST'){
$email = trim($_POST['email']);
$password = $_POST['password'];

// Check if user exists
$stmt = $pdo->prepare("SELECT * FROM users WHERE email=:email");
$stmt->execute(['email'=>$email]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if($user && password_verify($password, $user['password'])){
// Login successful
session_regenerate_id(true); // Prevent session fixation
$_SESSION['user_id'] = $user['id'];
$_SESSION['username'] = $user['username'];

header("Location: dashboard.php");
exit;
} else {
$error = "❌ Invalid email or password!";
}
}
?>

<h2>🔐 User Login</h2>

<?php if(isset($error)) echo "<p style='color:red;'>$error</p>"; ?>

<form method="POST">
<input type="email" name="email" placeholder="Email" required><br><br>
<input type="password" name="password" placeholder="Password" required><br><br>
<button type="submit">Login</button>
</form>
<p>Don't have an account? <a href="register.php">Register here</a></p>

🧩 5. Secure Dashboard (dashboard.php)
<?php
session_start();

if(!isset($_SESSION['user_id'])){
header("Location: login.php");
exit;
}
?>

<h2>Welcome, <?= htmlspecialchars($_SESSION['username']) ?></h2>
<p>You are logged in securely.</p>
<a href="logout.php">Logout</a>

❌ 6. Logout (logout.php)
<?php
session_start();
session_destroy();
header("Location: login.php");
exit;
?>


💡 Maelezo:

Session inafutwa ili kuondoa access ya user baada ya logout.

🧠 7. Vidokezo vya Security

Password Hashing:

$hash = password_hash($password, PASSWORD_DEFAULT);


Hakikisha passwords hazihifadhiwi wazi.

PDO Prepared Statements:

Kuzuia SQL Injection.

Session Security:

session_regenerate_id(true) baada ya login.

Use HTTPS kwa secure session cookies.

Error Messages:

Usitoe message za kiufundi kwa user, toa generic message.

Brute Force Protection:

Consider rate limiting au lockout mechanism baada ya login attempts nyingi.

✅ 8. Hitimisho

Mfumo huu ni msingi wa secure user login system.

Inatumia best practices: PDO, password hashing, session management, na proper error handling.

Unaweza kuongeza features kama remember me, 2FA, na password reset.

🔗 Tembelea:

👉 https://www.faulink.com/

Kwa mafunzo zaidi ya PHP, MySQL, PDO, na web application security