PHP ile Kullanıcı Giriş Sistemi Yapımı

PHP ile Kullanıcı Giriş Sistemi Yapımı

PHP ile basit ve güvenli bir kullanıcı giriş sistemi oluşturmak, web uygulamaları için önemli bir adımdır. Bu yazıda sizlere, kullanıcı kayıt işlemi, giriş doğrulama ve güvenlik önlemleri hakkında adım adım bir rehber sunacağım.

1. Veritabanı Yapısının Oluşturulması

Öncelikle kullanıcı bilgilerini saklamak için bir MySQL veritabanı tablosu oluşturalım:

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

2. config.php Dosyasının Oluşturulması

config.php dosyası, veritabanı bağlantısını merkezi olarak yönetmek için kullanılır. Aşağıdaki kodu içeren bir config.php dosyası oluşturun:

<?php
$host = "localhost";
$dbname = "your_database";
$username = "your_username";
$password = "your_password";

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
    die("Veritabanı bağlantı hatası: " . $e->getMessage());
}
?>

Bu dosya, diğer PHP dosyalarına dahil edilerek (include) kullanılacaktır.

3. Kullanıcı Kaydı (Registration)

Aşağıdaki PHP kodu, kullanıcıları güvenli bir şekilde kaydetmek için bcrypt ile şifrelemeyi kullanır:

<?php
require 'config.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = trim($_POST['username']);
    $email = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
    $password = password_hash($_POST['password'], PASSWORD_DEFAULT);
    
    $stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");
    if ($stmt->execute([$username, $email, $password])) {
        echo "Kayıt başarılı! Giriş yapabilirsiniz.";
    } else {
        echo "Hata oluştu.";
    }
}
?>

Kullanıcılar, bu formu doldurarak sisteme kayıt olabilirler:

<form action="register.php" method="post">
    <label>Kullanıcı Adı:</label>
    <input type="text" name="username" required>
    
    <label>E-posta:</label>
    <input type="email" name="email" required>
    
    <label>Şifre:</label>
    <input type="password" name="password" required>
    
    <button type="submit">Kayıt Ol</button>
</form>

4. Kullanıcı Girişi (Login)

Kullanıcının şifresini doğrulamak için aşağıdaki kodu kullanabilirsiniz:

<?php
session_start();
require 'config.php';

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $username = trim($_POST['username']);
    $password = $_POST['password'];
    
    $stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
    $stmt->execute([$username]);
    $user = $stmt->fetch();
    
    if ($user && password_verify($password, $user['password'])) {
        $_SESSION['user_id'] = $user['id'];
        $_SESSION['username'] = $user['username'];
        echo "Giriş başarılı!";
    } else {
        echo "Geçersiz kullanıcı adı veya şifre!";
    }
}
?>

Giriş formu:

<form action="login.php" method="post">
    <label>Kullanıcı Adı:</label>
    <input type="text" name="username" required>
    
    <label>Şifre:</label>
    <input type="password" name="password" required>
    
    <button type="submit">Giriş Yap</button>
</form>

5. Güvenlik Önlemleri

  1. Şifreleme: password_hash() ve password_verify() fonksiyonlarını kullanarak güvenli şifre saklama.
  2. SQL Enjeksiyonuna Karşı Koruma: PDO kullanarak parametreli sorgularla veri işleme.
  3. Oturum Yönetimi: session_regenerate_id(true); ile oturum sabitlemeyi önleme.
  4. CSRF Koruması: Giriş ve kayıt formlarında CSRF token kullanımı.

Yorum gönder

This site uses Akismet to reduce spam. Learn how your comment data is processed.