irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Profesyonel bir üyelik sistemi üç ana bölümden oluşur. 2026 yılı standartlarında en önemli kural: Asla şifreleri veritabanında düz metin olarak saklamayın! Her zaman password_hash() fonksiyonunu kullanmalısınız.
Kullanıcıdan bilgileri alır, e-posta kontrolü yapar ve şifreyi kriptolayarak kaydederiz.
Giriş işleminde veritabanındaki hashlenmiş şifre ile kullanıcının yazdığı şifreyi password_verify() ile karşılaştırırız.
Sisteme giriş yapan bir kullanıcıyı korumalı sayfalarda nasıl kontrol ederiz ve güvenli çıkış nasıl sağlanır?
profil.php (Korunmuş Sayfa):
cikis.php:
Üyelik sistemi kurarken en kritik nokta veriyi saklama ve doğrulama aşamasıdır. password_hash ve password_verify ikilisi modern PHP geliştiriciliğinin altın kuralıdır. Bu temel yapıyı kurduktan sonra üzerine "Şifremi Unuttum", "E-posta Onaylama" gibi ek özellikler ekleyerek sisteminizi geliştirebilirsiniz.
1. Kayıt Ol (Register) Mantığı
Kullanıcıdan bilgileri alır, e-posta kontrolü yapar ve şifreyi kriptolayarak kaydederiz.
PHP:
<?php
require_once 'Database.php'; // Önceki derslerdeki PDO sınıfı
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$db = Database::getInstance()->getConnection();
$kullanici = htmlspecialchars($_POST['username']);
$eposta = filter_var($_POST['email'], FILTER_SANITIZE_EMAIL);
// Şifreyi güvenli bir şekilde hashle (Geri döndürülemez)
$sifre = password_hash($_POST['password'], PASSWORD_BCRYPT);
$ekle = $db->prepare("INSERT INTO uyeler (kullanici_adi, eposta, sifre) VALUES (?, ?, ?)");
try {
$ekle->execute([$kullanici, $eposta, $sifre]);
echo "Kayıt başarılı! Şimdi giriş yapabilirsiniz.";
} catch (PDOException $e) {
echo "Hata: E-posta adresi zaten kayıtlı olabilir.";
}
}
?>
2. Giriş Yap (Login) Mantığı
Giriş işleminde veritabanındaki hashlenmiş şifre ile kullanıcının yazdığı şifreyi password_verify() ile karşılaştırırız.
PHP:
<?php
session_start();
require_once 'Database.php';
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$db = Database::getInstance()->getConnection();
$eposta = $_POST['email'];
$sifre = $_POST['password'];
$sorgu = $db->prepare("SELECT * FROM uyeler WHERE eposta = ?");
$sorgu->execute([$eposta]);
$uye = $sorgu->fetch();
if ($uye && password_verify($sifre, $uye['sifre'])) {
// Şifre doğru! Session bilgilerini oluşturalım
$_SESSION['uye_id'] = $uye['id'];
$_SESSION['uye_ad'] = $uye['kullanici_adi'];
session_regenerate_id(); // Güvenlik için ID yenile
header("Location: profil.php");
} else {
echo "Hatalı e-posta veya şifre!";
}
}
?>
3. Oturum Kontrolü ve Çıkış (Logout)
Sisteme giriş yapan bir kullanıcıyı korumalı sayfalarda nasıl kontrol ederiz ve güvenli çıkış nasıl sağlanır?
profil.php (Korunmuş Sayfa):
PHP:
<?php
session_start();
if (!isset($_SESSION['uye_id'])) {
header("Location: giris.php");
exit();
}
echo "Hoş geldin, " . $_SESSION['uye_ad'];
?>
cikis.php:
PHP:
<?php
session_start();
session_destroy(); // Tüm oturum verilerini temizle
header("Location: giris.php");
?>
Üyelik Sistemi Güvenlik Kontrol Listesi
| Özellik | Yöntem | Neden? |
|---|---|---|
| Şifreleme | password_hash() | Veritabanı çalınsa bile şifreler okunamaz. |
| SQL Güvenliği | Prepared Statements | SQL Injection saldırılarını engeller. |
| Oturum Güvenliği | session_regenerate_id() | Session Hijacking (oturum çalma) riskini azaltır. |
| XSS Koruması | htmlspecialchars() | Kullanıcı adlarına gizlenen zararlı kodları etkisiz kılar. |
Sonuç
Üyelik sistemi kurarken en kritik nokta veriyi saklama ve doğrulama aşamasıdır. password_hash ve password_verify ikilisi modern PHP geliştiriciliğinin altın kuralıdır. Bu temel yapıyı kurduktan sonra üzerine "Şifremi Unuttum", "E-posta Onaylama" gibi ek özellikler ekleyerek sisteminizi geliştirebilirsiniz.