
Web uygulamalarında kullanıcıların güvenli bir şekilde giriş yapmasını sağlamak için oturum yönetimi ve kimlik doğrulama sistemleri kullanılır. PHP ile güvenli bir kimlik doğrulama mekanizması nasıl yapılır anlatıyorum.
1. Veritabanı Yapılandırması
İlk olarak, kullanıcı bilgilerini saklamak için MySQL veritabanında bir users tablosu oluşturalım:
SQL
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
);
2. Veritabanı Bağlantısı (database.php)
PHP
class Database {
private $host = 'localhost';
private $db_name = 'user_auth';
private $username = 'root';
private $password = '';
public $conn;
public function getConnection() {
$this->conn = null;
try {
$this->conn = new PDO('mysql:host=' . $this->host . ';dbname=' . $this->db_name, $this->username, $this->password);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $exception) {
echo 'Connection error: ' . $exception->getMessage();
}
return $this->conn;
}
}
3. Kullanıcı Kaydı (register.php)
Aşağıdaki kod, kullanıcıların güvenli bir şekilde kayıt olmasını sağlar.
PHP
include_once 'database.php';
$database = new Database();
$db = $database->getConnection();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'];
$email = $_POST['email'];
$password = password_hash($_POST['password'], PASSWORD_DEFAULT);
$query = 'INSERT INTO users (username, email, password) VALUES (:username, :email, :password)';
$stmt = $db->prepare($query);
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
$stmt->bindParam(':password', $password);
if ($stmt->execute()) {
echo 'Kayıt başarılı!';
} else {
echo 'Kayıt başarısız.';
}
}
4. Kullanıcı Girişi (login.php)
Kullanıcı girişini doğrulamak için aşağıdaki kodu kullanabilirsiniz:
PHP
session_start();
include_once 'database.php';
$database = new Database();
$db = $database->getConnection();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = $_POST['email'];
$password = $_POST['password'];
$query = 'SELECT id, username, password FROM users WHERE email = :email';
$stmt = $db->prepare($query);
$stmt->bindParam(':email', $email);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_ASSOC);
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 e-posta veya şifre.';
}
}
5. Oturum Kontrolü (session_check.php)
Kullanıcının oturumunun aktif olup olmadığını kontrol eden bir dosya:
PHP
session_start();
if (!isset($_SESSION['user_id'])) {
echo 'Oturum aktif değil';
exit;
} else {
echo 'Hoşgeldiniz, ' . $_SESSION['username'];
}
6. Kullanıcı Çıkışı (logout.php)
Kullanıcının güvenli bir şekilde oturumu kapatmasını sağlamak için:
PHP
session_start();
session_unset();
session_destroy();
header('Location: login.php');
exit;
7. Güvenlik Önlemleri
Kimlik doğrulama sistemlerinde güvenlik kritik bir konudur. Aşağıdaki önlemleri almak gereklidir:- Şifreleri hashleyin:
password_hash()
vepassword_verify()
kullanarak şifreleri güvenli bir şekilde saklayın. - Oturum süresini sınırlandırın: Kullanıcının belirli bir süre inaktif kalması durumunda oturumu otomatik olarak sonlandırın.
- CSRF koruması ekleyin: Formlara CSRF token ekleyerek saldırıları önleyin.
- SQL Injection önleyin: Kullanıcı girişlerini bindParam() ile koruyarak veritabanı saldırılarını engelleyin.
- HTTPS kullanın: Kullanıcı giriş bilgilerini şifrelemek için HTTPS zorunlu olmalıdır.
Benzer Yazılar

PHP ile Çok Katmanlı MVC Mimari Kullanımı
0 Yorumlar
Yorumlar ()
Henüz yorum yok. İlk yorum yapan sen ol!