PHP Oturum İşlemleri

androids

Yeni üye
6 Ağu 2011
23
0
İstanbul
Giriş
Merhaba, bu yazımızda php ile oturum işlemlerini yapacağız. Yazımız bir kaç bölümden oluşacaktır. Form sayfası nasıl oluşturulur, veritabanı bağlantısı nasıl yapılır, veri tabanında sorgu nasıl yapılır, google recaptcha nedir, güvenlik açıklarının nasıl önüne geçebiliriz gibi sorunları çözüme kavuşturacağız.O halde başlayalım.

phpMyAdmin ile Veritabanı Bağlantısı
“baglan.php” ismindeki dosyamıza veritabanı bilgilerimizi ekleyeceğiz.Kullanıcı adı, şifre ve veritabanı adını kendinize uygun bir şekilde doldurduktan sonra form sayfamıza geçebiliriz. Bu oluşturduğumuz dosyayı projemize dahil ederek veri tabanı bağlantısını sağlayacağız.
Kod:
<?php 
$sunucu="localhost";
$kullanici_adi="------";
$sifre="------";
$veritabani="------";
mysqli_query("SET NAMES UTF8");
$baglan= mysqli_connect($sunucu,$kullanici_adi,$sifre,$veritabani);
if(!$baglan)
{
die("Baglanti Hatasi: " . mysqli_connect_error());
}
?>
Form Sayfası
Form sayfamızda email ve şifre girilmesi için 2 input ve giriş butonumuz olacaktır. Bu inputlara ve butona uygun name oluşturarak daha sonra giriş kısmında kullanacağız. Bunun öncesinde daha önce oluşturduğumuz “baglan.php” adlı dosyayı form sayfamıza dahil etmeliyiz. Eğer etmezsek veritabanı bilgilerine hiçbir zaman ulaşamayacağımız için gerekli sorguları yapsak da başarılı olamayız. Dahil etmek için de “require()” fonksiyonunda yararlanacağız.
Kod:
<!DOCTYPE html>
<?php
	require("baglan.php");
?>
<html>
<head>
	<**** http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Giriş Yap</title>
</head>
<body>
	<form method="POST" action="">
		Email <input type="email" name="email" ></input><br><br>
		Sifre  <input type="password" name="sifre" ></input><br><br>
		<button type="submit" name="giris_yap" >Giriş</button><br><br>
	</form>
</body>
</html>
POST İşlemleri ve Hata Uyarıları
Öncelikle daha sonradan kolaylık olsun diye post edilen yani kullanıcı tarafından iletilen email ve sifre bilgilerini birer değişkene atayalım. Formda oluşabilecek hatalar için de durumu false olan bir hata değişkeni ve hatalarımızı ekleyebileceğimiz bir hata dizisi oluşturalım. Email veya şifre alanın boş bırakılması hataları oluştuğunda hatalar adındaki dizimize ekleyelim ve hata durumuzu true olarak değiştirelim.
Kod:
$email=$_POST["email"];
$sifre=$_POST["sifre"];
$hata=false;
$hatalar=array();
if(empty($email)){
$hata = true;
$hatalar[] = 'Email alanı boş bırakılamaz.';
}
if(empty($sifre)) {
$hata = true;
$hatalar[] = 'Şifre alanı boş bırakılamaz.';
}
Hataların Form Sayfasında Göstermek
Şimdi ise post edilen kullanıcı bilgilerin veritabanınında olup olmadığının kontrolünü sağlayalım. Eğer girilen kullanıcı bilgileri veri tabanında bulunamadıysa bunu da hata dizimize ekleyeceğiz.Bu kontroller giriş butonuna tıklandıktan sonra olacağı için ilk koşulumuz butona tıklanmasıdır.İkinci koşulumuz ise daha önce hatalar dizisinin boş olmasıdır yani herhangi bir hata bulunmamasıdır.Eğer hata var ise bu hataları count() fonksiyonu ile sayıp kaç adet hata bulunduğunu ve hataları foreach döngüsü kullanarak ekranda göstermesini sağlamalıyız.
Kod:
if ($hata) 
{  
$toplamhata = count($hatalar);
echo '<div class="alert alert-danger" role="alert">' . $toplamhata . ' Hata bulundu. Lütfen bu hataları giderin ve tekrar deneyin.</div>';
foreach ($hatalar as $hatalarr) 
{
echo '<div class="alert alert-warning" role="alert">' . $hatalarr . '</div>';
}
}
Session Oluşturma ve Yönlendirme
Herhangi bir hatanın olmadığı durumda ise kullanıcının girdiği bilgileri sorgulatıp giriş başarılı ise giriş yapan kişinin bilgilerini tutmak için bir session oluşturup id sini atayabiliriz.Bunları sağladıktan sonra header() fonksiyonu ile kullanıcı istenilen sayfaya yönlendirilebilir.Giriş başarısız ise hatalar dizisine atayıp hatayı ekranda gösterebiliriz.
Kod:
if(!$hata)
{
$sorgu="select * from users where email='$email' and sifre='$sifre' ";
$sonuc=$baglan->query($sorgu);
$giris=$sonuc->fetch_assoc();	
if($giris)
{
$_SESSION["id"]=$giris["id"];
header("********:panel.php");
}
else
{
$hata = true;
$hatalar[] ='Hatalı giriş.Üyelik bulunamadı.';		
}	
}
Giriş İsteği
Durumların kontrolünü yaptıktan sonra giriş isteği kontrolünü sağladığımızda php kodlarımız;
Kod:
if(isset($_POST["giris_yap"]))
{
if(!$hata)
{
$sorgu="select * from users where email='$email' and sifre='$sifre' ";
$sonuc=$baglan->query($sorgu);
$giris=$sonuc->fetch_assoc();	
if($giris)
{
$_SESSION["id"]=$giris["id"];
header("********:panel.php");
}
else
{
$hata = true;
$hatalar[] ='Hatalı giriş.Üyelik bulunamadı.';		
}		
}
if ($hata) 
{  
$toplamhata = count($hatalar);
echo '<div class="alert alert-danger" role="alert">' . $toplamhata . ' Hata bulundu. Lütfen bu hataları giderin ve tekrar deneyin.</div>';
foreach ($hatalar as $hatalarr) 
{
echo '<div class="alert alert-warning" role="alert">' . $hatalarr . '</div>';
}
}
}
Oturum Başlatma ve Form Sayfası Son Hali
Giriş yapan kişiye session oluşturabilmemiz için ise kod bloğumuzun yukarısına “session_start()” fonksiyonu çağırmamız gerekmektedir. Bu koşulu da sağladıktan sonra form sayfamızın son hali aşağıdaki gibi olmaktadır.

Kod:
<!DOCTYPE html>
<?php
	session_start();
	require("baglan.php");
?>
<html>

<head>
	<**** http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Giriş Yap</title>
	
</head>
<body>
	<form method="POST" action="">
	Email <input type="email" name="email" ></input><br><br>
	Sifre  <input type="password" name="sifre" ></input><br><br>
	<button type="submit" name="giris_yap" >Giriş</button><br><br>
	</form>
<?php
	$email=$_POST["email"];
	$sifre=$_POST["sifre"];
	$hata=false;
	$hatalar=array();
	if(empty($email)){
        $hata = true;
        $hatalar[] = 'Email alanı boş bırakılamaz.';
	}
	if(empty($sifre)) {
        $hata = true;
        $hatalar[] = 'Şifre alanı boş bırakılamaz.';
	}
	if(isset($_POST["giris_yap"]))
	{
	if(!$hata)
	{
	$sorgu="select * from users where email='$email' and sifre='$sifre' ";
	$sonuc=$baglan->query($sorgu);
	$giris=$sonuc->fetch_assoc();	
	if($giris)
	{
	$_SESSION["id"]=$giris["id"];
        header("********:panel.php");
	}
	else
	{
	$hata = true;
	$hatalar[] ='Hatalı giriş.Üyelik bulunamadı.';		
	}		
	}
	if ($hata) 
	{  
	$toplamhata = count($hatalar);
	echo '<div class="alert alert-danger" role="alert">' . $toplamhata . ' Hata bulundu. Lütfen bu hataları giderin ve tekrar deneyin.</div>';
	foreach ($hatalar as $hatalarr) 
	{
	echo '<div class="alert alert-warning" role="alert">' . $hatalarr . '</div>';
	}
	}
	}
?>	 

</body>
</html>

Yönlendirilen “panel.php” Sayfası
Kod:
<!DOCTYPE html>
<?php
	session_start();
	require("baglan.php");
?>
<html>

<head>
	<**** http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<title>Panel</title>
	
</head>
<body>
<h2>Panel sayfasına hoş geldiniz.</h2>

</body>
</html>
Sonuç
Veri tabanı bağlantısını oluşturduk, form sayfasında herhangi bir hata var ise sayfamızda bu hataları gösterdik. Hata yoksa kullanıcı giriş isteğini aldık. Kullanıcı bilgilerini veri tabanında sorgulatıp doğru ise kullanıcının yönlendirilmesini gerçekleştirdik.

Yazımızın devamı için lütfen tıklayınız.
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.