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
- Şifreleme:
password_hash()
vepassword_verify()
fonksiyonlarını kullanarak güvenli şifre saklama. - SQL Enjeksiyonuna Karşı Koruma: PDO kullanarak parametreli sorgularla veri işleme.
- Oturum Yönetimi:
session_regenerate_id(true);
ile oturum sabitlemeyi önleme. - CSRF Koruması: Giriş ve kayıt formlarında CSRF token kullanımı.
Yorum gönder