Merhaba arkadaşlar, mobilhanem.com için hazırladığımız php eğitim serimizde bu ders Php de Oturum Yönetimi nasıl yapılır, temel yapılarıyla göreceğiz. Oturumun temel amacı kullanıcının oturum açtığı andan itibaren kendine özel alanında hareket edebilmesidir. Bir oturumu cookie ve session olmaz üzere iki farklı şekilde oluşturabiliriz. cookie tarayıcıda depolanan bir oturum veri iken session sunucuda depolandığı için daha güvenilirdir.
Cookie Nedir ?
Cookie (Çerez) client tarafında tutulan bir veridir. Client tarafında tutulduğu için kullanıcı tarafından değiştirilmesi kolaydır. Bu yüzden cookie kullanımı güvenli değildir.
Session Nedir ?
Session php tarafında kullanıcıya verilen özel bir kimliktir diyebiliriz. bir oturumu başlatmak için session_start() oturumu sonlandırmak için session_destroy() methodları kullanılır. session içerisindeki data ise $_SESSION global dizisinde tutulur.
örneğin:
<?php session_start(); // oturum başladı. $_SESSION["ad_soyad"] = "Vehbi Akdoğan"; // oturum başlatılan tüm sayalarda kullanılabilir. print_r($_SESSION); // session içerisindeki data session_destroy(); // oturum sona erdi.
Oturum Yönetimi
Oturum yukarıda da bahsettiğimiz gibi bir kullanıcının web sitesinde kendi alanııyla ilgilenebilmesini sağlayan, kullanıcıya özel data tutulmasını sağlayan bir yapıdır. örneğin mobilhanem.com üzerinde yazılan yazılar herkese açıktır herhangi bir oturum gerektirmezken, şuanda okuduğunuz yazı bana aittir ve benim açtığım oturum ile bana ait olduğu belirlenmektedir. Oturum dediğimiz yapıyı kullanmasaydık yazıyı kimin yazdığını belirlememiz çok zor olurdu. Veya oluşan herhangi bir sorunda bu sorunun kimin tarafında oluştuğunu bulmak oldukça güç olurdu.
Php tarafında bir oturumun senaryosu şu şekildedir.
mobilhanem.com web sitesine girdiğimizi varsayalım.
Arka planda tarayıcıda PHPSESSID adında bir cookie oluşturulur. Bu cookie ile aynı isimde sunucuda da bir dosya oluşturulur. ve bu dosya içerisinde oturum bilgileri tutulur. Bu sayede tarayıcıda sadece bir id değerinden oluşan cookie herhangi bir güvenlik riski oluşturmamış olur. Php tarafında bu id değerine ait bir session varmı kontrol edilir ve oturum yönetiminin temeli başlamış olur.
Teoriden sıkıldık artık kod yazalım dediğinizi duyar gibiyim 🙂
Session Kullanarak Basit Login Ekranı Yapımı
ilk adımda veri tabanı kullanmayacağımız için varsayılan kullanıcı adı ve şifre belirleyelim. girilen bilgiler doğru ise oturum açtıralım.
<?php session_start(); // default değerler $kadi = "admin"; $sifre = "1234"; $hata = ""; if($_POST) { // post işlemi yapılmış mı $postKadi = addslashes($_POST["kullanici_adi"]); $postSifre= addslashes($_POST["sifre"]); if($kadi == $postKadi && $sifre == $postSifre) { // bilgiler eşleşiyor oturum aç. $_SESSION["kullanici_adi"] = $kadi; // index sayfasına yeniden yönlendir. header("Location: index.php"); }else { $hata = " Kullanıcı adı veya şifre hatalı!"; } } // çıkış yap if(isset($_GET["islem"]) && $_GET["islem"] == "cikis") { session_destroy(); // çıkış yap index sayfasına yeniden yönlendir. header("Location: index.php"); } ?> <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>Mobilhanem Login</title> </head> <body> <?php if(isset($_SESSION["kullanici_adi"])) { // oturum açılmış login ekranını gösterme. ?> <p>Merhaba <?=$_SESSION["kullanici_adi"]?>, Oturum Açtığınız için teşekkür ederiz. </p> <a href="?islem=cikis"> Çıkış Yap</a> <?php }else { // oturum açılmamış, login ekranını göster. ?> <form action="" method="post"> <table> <tr> <td colspan="2"> <?=$hata?></td> </tr> <tr> <td>Kullanıcı adı</td> <td><input type="text" name="kullanici_adi" /></td> </tr> <tr> <td>Şifre</td> <td><input type="password" name="sifre" /></td> </tr> <tr> <td colspan="2"> <button type="submit"> Giriş Yap</button></td> </tr> </table> <?php } ?> </form> </body> </html>
kodu kopyalayıp. index.php adında bir dosyaya kaydedin. Tarayıcıda açtığınızda giriş ekranı gelir. kullanıcı adı: admin, şifre: 1234 olarak denerseniz giriş yapılacaktır. artık sayfayıda yenileseniz, tarayıcıyıda kapatıp açsanız çıkış yap demediğiniz sürece oturumun kapanmadığını göreceksiniz.
Evet iyi güzel oturum açtık da biz bunu veri tabanı ile nasıl ilişkilendireceğiz ?
Hemen PHP Eğitimleri – PDO İle Veri Tabanı Bağlantısı dersimize gidiyoruz ve veri tabanı bağlantısı yapmayı hatırlıyoruz.
Ardından PHP Eğitimleri – PDO ile CRUD İşlemleri dersinden pdo ile crud işlemlerini hatırlıyoruz.
Artık hazırız 🙂
PDO ve Session Kullanarak Login Olma
öncelikle işlemlerimizi kolaylaştırmak için config.php adında bir dosya oluşturup veri tabanı bağlantımızı burada tutalım.
<?php session_start(); // oturumu başlattık. try { // veri tabanı bağlantımızı yaptık. $db = new PDO("mysql:host=localhost;dbname=mobilhanem", "root", ""); } catch ( PDOException $e ){ echo "Bir Hata Oluştu: ".$e->getMessage(); exit(); }
Daha sonra az önce oluşturduğumuz index.php de değişikliklerimizi yapalım.
<?php include "config.php"; // config dosyamızı sayfaya dahil ettik. $hata = ""; if($_POST) { // post işlemi yapılmış mı $postKadi = addslashes($_POST["kullanici_adi"]); $postSifre= addslashes($_POST["sifre"]); $prepare = $db->prepare("select * from kullanicilar where kullanici_adi=:kadi && sifre=:sifre"); $prepare->execute(array( "kadi" => $postKadi, "sifre" => $postSifre )); if($prepare->rowCount() > 0) { // bilgiler eşleşiyor oturum aç. $kullanici = $prepare->fetch(); $_SESSION["kid"] = $kullanici["kullanici_id"]; // oturum için kullanıcı id değerini tutmamız yeterli. bu id değeri ile diğer bilgilerine ulaşabiliriz. // index sayfasına yeniden yönlendir. header("Location: index.php"); }else { $hata = " Kullanıcı adı veya şifre hatalı!"; } } // çıkış yap if(isset($_GET["islem"]) && $_GET["islem"] == "cikis") { session_destroy(); // çıkış yap index sayfasına yeniden yönlendir. header("Location: index.php"); } ?> <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8"> <title>Mobilhanem Login</title> </head> <body> <?php if(isset($_SESSION["kid"])) { // oturum açılmış login ekranını gösterme. // sessiondaki id ile kullanıcının bilgilerini çek. $kullanici = $db->query("select * from kullanicilar where kullanici_id='".$_SESSION["kid"]."'")->fetch(); ?> <p>Merhaba <?=$kullanici["ad_soyad"]?>, Oturum Açtığınız için teşekkür ederiz. </p> <a href="?islem=cikis"> Çıkış Yap</a> <?php }else { // oturum açılmamış, login ekranını göster. ?> <form action="" method="post"> <table> <tr> <td colspan="2"> <?=$hata?></td> </tr> <tr> <td>Kullanıcı adı</td> <td><input type="text" name="kullanici_adi" /></td> </tr> <tr> <td>Şifre</td> <td><input type="password" name="sifre" /></td> </tr> <tr> <td colspan="2"> <button type="submit"> Giriş Yap</button></td> </tr> </table> <?php } ?> </form> </body> </html>
Kodumuzu yukarıdaki şekilde değiştirdik.
Şimdi veri tabanında iki adet veri mevcut.
kullanıcı adı: vehbiakdogan
Şifre: 12345
ile giriş yapınca Merhaba vehbi akdoğann, Oturum Açtığınız için teşekkür ederiz. ekrana yazacaktır.
kullanıcı adı: mobilhanem
Şifre: 0000
ile giriş yapınca Merhaba mobilhanem, Oturum Açtığınız için teşekkür ederiz. ekrana yazacaktır.
bunların dışında bir veri girişinde ise kullanıcı adı ve şifre hatalı mesajı ekranda görünecektir.
Oturum açıldıktan sonra ise sadece kullanıcının kullanici_id değeri ile kullanıcıya erişip istediğimiz şekilde işlem yapabiliriz. Biz şimdilik sadece kullanıcının ad_soyad bilgisini ekrana yazdırdık.
Bir dersimizin daha sonuna geldik bir sonraki dersimizde görüşmek dileğiyle ?
Konuyla ilgili yorumlarınızı konu altından yapabilirsiniz, ayrıca sorularınızı yine konu altından ve Mobilhanem Soru&Cevap bölümünden sorabilirsiniz.
Tüm php dersleri için tıklayınız..
38
Merhaba. Öncelikle bu eğitimler için çok teşekkür ederim, emeğinize sağlık. Sorum şu “Session Kullanarak Basit Login Ekranı Yapımı” kısmındaki kodlarımızda session_start(); yani oturum açma komutumuz neden if($_POST) yapısının içinde kullanıcı adı ve şifre kontrolü yapıldıktan sonra konulmadı da, php kodlarımızın en başına konuldu. Bu durumda daha sayfayı ilk açtığımızda kullanıcı adı şifre kontrolü yapılmadan oturum açılmış olmuyor mu. Kodları deneyince sorun yok gerçi ama mantığını tam kavrayamadım. Teşekkür ederim.
Merhaba Serkan
session_start() komutu oturum açmaktan ziyade sayfamızda oturum kullandığımızı belirtmemizi sağlıyor. Yani şöyleki session_start() dediğimizde tarayıcıda PHPSESSID adında cookie oluşuyor ama sunucu tarafında bu dosyanın içerisi boş henüz. post işleminden sonra biz kullanıcı adı ve şifreyi kaydediyoruz. ve daha sonraki girişlerde de o kullanıcı adı kayıtlı mı diye kontrol ediyoruz. session_start() sadece bir oturum belirtecinden ibaret. Tarayıcı ile sunucuyu bir nevi ilişkilendirmeye yarıyor anlayacağın.