Neler yeni
XenForo Bannerlar
Modern AdBlock Uyarısı

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Web geliştirme PHP'de Kullanıcı Giriş Sistemi: Güvenli Oturum Yönetimi

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
3,276
Tepkime puanı
4,783
Puanları
113
Yaş
31
Konum
Türkiye
Dc
fatihbulut

Kod Bloğu: Tam Çalışan Kullanıcı Giriş Sistemi

PHP:
<?php
// Oturumu başlat
session_start();

// Veritabanı bağlantısı (Örnek: MySQLi)
$db = new mysqli('localhost', 'kullanici_adi', 'sifre', 'veritabani_adi');

// Hata kontrolü
if ($db->connect_error) {
    die("Veritabanı bağlantı hatası: " . $db->connect_error);
}

// Kullanıcı giriş fonksiyonu
function kullaniciGiris($kullanici_adi, $sifre, $db) {
    // SQL Injection koruması
    $kullanici_adi = $db->real_escape_string($kullanici_adi);
    
    // Veritabanından kullanıcıyı sorgula
    $sorgu = $db->prepare("SELECT id, sifre FROM kullanicilar WHERE kullanici_adi = ?");
    $sorgu->bind_param("s", $kullanici_adi);
    $sorgu->execute();
    $sonuc = $sorgu->get_result();
    
    if ($sonuc->num_rows === 1) {
        $kullanici = $sonuc->fetch_assoc();
        
        // Şifre doğrulama (password_hash ile hashlenmiş şifreler için)
        if (password_verify($sifre, $kullanici['sifre'])) {
            // Oturum değişkenlerini ayarla
            $_SESSION['kullanici_id'] = $kullanici['id'];
            $_SESSION['kullanici_adi'] = $kullanici_adi;
            return true;
        }
    }
    return false;
}

// Form gönderildi mi kontrolü
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['giris'])) {
    $kullanici_adi = $_POST['kullanici_adi'] ?? '';
    $sifre = $_POST['sifre'] ?? '';
    
    if (kullaniciGiris($kullanici_adi, $sifre, $db)) {
        header("Location: profil.php"); // Giriş başarılıysa yönlendir
        exit();
    } else {
        $hata = "Kullanıcı adı veya şifre hatalı!";
    }
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Kullanıcı Girişi</title>
</head>
<body>
    <h2>Giriş Yap</h2>
    <?php if (isset($hata)): ?>
        <p style="color: red;"><?= htmlspecialchars($hata) ?></p>
    <?php endif; ?>
    
    <form method="POST">
        <input type="text" name="kullanici_adi" placeholder="Kullanıcı Adı" required>
        <input type="password" name="sifre" placeholder="Şifre" required>
        <button type="submit" name="giris">Giriş Yap</button>
    </form>
</body>
</html>

Bu Kodun İşlevleri ve Özellikleri

1. Güvenlik Önlemleri

  • SQL Injection Koruması: real_escape_string() ve prepare/execute kullanımı
  • Şifre Güvenliği: password_hash() ve password_verify() fonksiyonları
  • XSS Koruması: htmlspecialchars() ile çıktı filtreleme
  • Oturum Yönetimi: session_start() ile güvenli oturum

2. Temel İş Akışı

  1. Kullanıcı giriş formunu gönderir
  2. Sunucu kullanıcı bilgilerini veritabanında kontrol eder
  3. Şifre doğrulaması yapılır
  4. Başarılı girişte oturum başlatılır ve yönlendirme yapılır

3. Kullanım Alanları

  • Üyelik gerektiren web siteleri (E-ticaret, blog sistemleri)
  • Yönetim panelleri
  • Kullanıcı profili sistemleri
  • API erişim kontrolleri

Kodun Detaylı Açıklaması

Veritabanı Bağlantısı

PHP:
$db = new mysqli('localhost', 'kullanici_adi', 'sifre', 'veritabani_adi');
  • MySQL veritabanına bağlantı kurar
  • Gerçek projelerde bağlantı bilgileri config dosyasında saklanmalıdır
PHP:
$sorgu = $db->prepare("SELECT id, sifre FROM kullanicilar WHERE kullanici_adi = ?");
  • Prepared statement kullanımı SQL injection riskini ortadan kaldırır
  • Kullanıcı adına göre veritabanında arama yapar
PHP:
if (password_verify($sifre, $kullanici['sifre'])) {
  • Veritabanında hashlenmiş olarak saklanan şifreyi doğrular
  • password_hash() ile oluşturulmuş şifreler için güvenli yöntem

Oturum Yönetimi

PHP:
$_SESSION['kullanici_id'] = $kullanici['id'];
  • Giriş yapan kullanıcının bilgilerini oturumda saklar
  • Diğer sayfalarda isset($_SESSION['kullanici_id']) kontrolü ile yetkilendirme yapılabilir

Geliştirme Önerileri

  1. Şifremi Unuttum fonksiyonu ekleyin
  2. Brute-force saldırılarına karşı giriş deneme sınırlaması
  3. CSRF token desteği ekleyin
  4. Veritabanında şifreler mutlaka hashlenmiş olmalıdır:
PHP:
$guvenli_sifre = password_hash($sifre, PASSWORD_DEFAULT);

Bu kod, temel düzeyde bir giriş sistemi için tüm güvenlik önlemlerini içerir. Gerçek projelerde ek güvenlik katmanları ve validasyon kuralları eklenmelidir.
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar