- 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ışı
- Kullanıcı giriş formunu gönderir
- Sunucu kullanıcı bilgilerini veritabanında kontrol eder
- Şifre doğrulaması yapılır
- 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
- Şifremi Unuttum fonksiyonu ekleyin
- Brute-force saldırılarına karşı giriş deneme sınırlaması
- CSRF token desteği ekleyin
- 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.