Anasayfa » Codeigniter, Php

Codeigniter Dersleri – 21 – Yönetici Girişi ve Yönetici Alanı – Session

20 Ağustos 2011 19.459 kez okundu 15 yorum
1 Star2 Stars3 Stars4 Stars5 Stars (4 oy,5 üzerinden : 4,75 )
Loading...

Herkese tekrar merhabalar, uzun bir aradan sonra bugün bir dersle daha sizlerleyim. Bugünkü dersimiz yine klasik codeigniter derslerinden olacak. Bahsedeceğimiz konu ise, kullanıcı giriş yapılabilecek bir giriş paneli, ancak giriş yapıldıktan sonra erişilebilecek bir kullanıcı veya yönetici alanı ve yeni kullanıcı kaydı. Ayrıca bu dersimizde sizlere session lardan bahsedeceğim.

İlk olarak size projenin bir kaç ekran görüntüsünü vereyim.

Giriş Panelimiz.

Kayıt panelimiz

İlk olarak view dosyamızı hazırlayalım, Bu dersimizde yine view dosyamız dinamik olacak ve header,footer ve main_content(ana kısım) bulunacak. Bunun için view klasörü altında includes adında bir klasör oluşturuyoruz ve içerisine footer.php, header.php, ve template.php adında 3 dosya oluşturuyoruz.

Template.php dosyamızın içerisi şu şekilde olacak.

Header ve footer dosyalarımıza ise klasik html kodlarını koyacağız. Header.php dosyamız şu şekilde,

ve footer.php dosyamızda şu şekilde olacak.

header dosyamızda bulunan aşağıdaki kodu biraz açalım

Şimdi burada bütün sayfalarda geçerli olacak bir css dosyasını projeye dahil ediyoruz. “echo base_url();” ile daha sonra belirleyeceğimiz projenin ana dizinine ulaşmış oluyoruz ve bu dizin altında bir css klasörü ve içerisinde style.css adında dosyamız olacak.

template.php dosyamızda footer ve header arasına main_content değişkenini koyarak, bu sayfayı controller dosyamızdan dinamik olarak yönetmeye çalışacağız. Yani hazırladığımız bütün sayfalar aynı şablonda olacak.

Ana şablonu hazırladıktan sonra şimdi geldi sıra login sayfamızı hazırlamaya, bunun için öncelikle login controllerini hazırlamamız lazım. İlk açılacak sayfa login sayfamız olması lazım. Bunun için şimdi controller altında login.php adında bir dosya oluşturuyoruz ve şu şekilde kodluyoruz.

Manuel olarak bu dosyayı yükledik ancak yüklediğimiz login_form.php dosyasını oluşturmadık. Gelin şimdi bu dosyayı oluşturalım.

Hemen klasik bir form oluşturuyoruz.

Giriş yapıldığında kullanıcıyı kontrol edecek bir fonksiyon hazırlamamız gerekiyor, bunu controller dosyamız olan login.php içinde hallediyoruz. Aşağıdaki şekilde bir fonksiyonu login.php dosyamıza ekliyoruz.

Tamam fonksiyonumuzu login.php içerisine kaydettik ama oradak çağırdığımız model dosyamızı hala oluşturmadık. Hemen models klasörü altına membership_model.php adında bir dosya oluşturup içerisine validate() fonksiyonunu yazıyoruz.

Hemen bir not düşeyim, normalde database fonksiyonlarını kullanabilmek için database kütüphanesini yüklememiz gerekiyordu, aynı şey session içinde geçerli . Bu library leri ister fonksiyonları kullandığımız yerde load ederiz, istersek benim şimdi yapacağım gibi autoload.php dosyamızdan otomatik load ederiz. Yukarıdaki fonksiyonu model dosyamıza ekledikten sonra gelin şimdi autolaod.php dosyamızı düzenleyelim. application/config/autoload.php dosyamızı açalım ve şu satırı bulalım

ve bu satırı şu şekilde düzenleyelim

Bu şekilde database ve session kütüphanelerini otomatik yüklemiş olduk. Session kütüphanesi yüklediğimizde kullanabilmek için config.php dosyamızda bulunan encryption_key ‘ e bir değer vermemiz gerekiyor.

İlk olarak application/config/config.php dosyamızda şu satırı buluyoruz.

ve burada kendimize göre bir key belirleyip tırnakların arasına yazıyoruz.

Hazır autoload.php den söz açılmışken, url ve formları oluştururken lazım olan helperlarıda yükleyelim.

autoload.php içerisinde şu satırı bulalım.

ve şu şekilde değiştirelim.

İnce ayarları da yaptıktan sonra gelin birde databaseimizi hazırlayalım.

membership adında bir tablo oluşturalım 6 alanlık. İsimleri ve türleri şu şekilde olsun.

id – int(11) auto_increment
firstname – varchar(25)
lastname – varchar(25)
username – varchar(25)
password – varchar(32)
email  – varchar(50)

password türümüzün uzunluğu 32 olacak. Çünkü şifreyi md5 şifreleme yöntemi ile kaydedeceğiz ve bu yöntemde oluşan hash kodları her zaman 32 bit uzunluğundadır.

Konu biraz dağıldı gibi, hemen toparlıyorum. Şimdi kullanıcı doğru giriş yaptığında validate_credentials() fonksiyonunda da görüldüğü gibi members_area.php dosyasına yönlenecek. Bu dosyayıda hazırlayalım. Views klasörü altına members_area.php dosyasını oluşturalım ve şu şekilde dolduralım.

Burada gördüğünüz gibi birde logout butonu var. Bunuda çıkış yapmak için kullanacağız ve işlevi sessionu silmek olacak. login.php içine logout() fonksiyonun oluşturuyoruz ve şu şekilde kodluyoruz.

Aslında şu ana kadar sezonun(session) nimetlerinden faydalanamadık. Neden derseniz, eğer adres çubuğuna
http://localhost/CodeIgniter_2.0.2/index.php/site/members_area
yazar ve gidersek members area ya erişmiş olacağız. Halbuki giriş yapmamız gerekiyordu. İşte aslında bu sayfaya her erişilmek istendiğinde giriş yapmış kullanıcı varmı diye kontrol etmemiz gerekiyor. Ve burada devreye sezonlar (ya da oturumlar) giriyor.

Şimdi hem diğer bir controller dosyamız olan site.php dosyamızı hazırlayacağız hem de oturum kontrolü gerçekleştireceğiz.

Bunu da yaptıktan sonra çıkış yapmış bir kullanıcı direk olarak members_area ya erişemeyecek.

Bu arada session kaydetmeyi gördük, bütün sessionları silmeyi de logout fonksiyonunda gördük, peki tek bir sessionu silmek istersek ne yapacağız.

O zaman set_userdata yerine unset_userdata kullanacağız.

Buraya kadar login logout işlemleri session işlemleri yetkisiz erişim işlemlerini tamamladık. Bir sonraki dersimde yeni kullanıcı kaydı gerçekleştirip, css dosyamızı hazırlayacağız. İyi günler…

<<< Önceki:

Sonraki: >>>


Facebookta Paylaş

15 yorum »

  • Memo dedi ki:

    Hocam merak ettigim birsey var Cikis yaptigimizda tekrar linki yazdigimda sayfa aciliyor Cookiesleri sildim denedim yine acildi bunu nasil engellerim.

  • Gürcan Kavakçı dedi ki:

    site.php dosyasını benim yukarıda yazdığım gibi yazdınız mı, yani construct içinde is_logged_in() fonksiyonu çağrılıyor mu. Bu fonksiyon o sayfaya erişilmek istendiğinde login olmuş kullanıcı varmı diye kontrol ediyor.

  • Memo dedi ki:

    sagolun hocam

  • Tugce dedi ki:

    Merhaba.Çok faydalı bir konu teşekkür ederim.
    Size sormak istediğim soru,bu yaptığımız kodla sınırlamak istediğimiz sayfalara is_logged_in() fonksiyonunu koyarsak çalışır mı bunu mera etmiştim.teşekkürler.

  • Gürcan Kavakçı dedi ki:

    Site.php içerisinden çağrılan bütün sayfalarda otomatik olarak is_logged_in() kontrolü yapılmaktadır. Ancak siz bu fonksiyonu direk view dosyası içerisinden çağırmak istiyorsanız, bunu library ile halletmeniz gerekecek.

  • Tugce dedi ki:

    Teşekkür ederim daha iyi anladım.Çok anlaşılabilir bir örnek olmuş sağolun.

  • ahmet dedi ki:

    üstad anlatım için saolasın emeğine sağlık. ben şunu merak ediyorum : sıradan bir site için bu framework yapısını ( codeigniter ) kullanmamın bana normal kullanımdan bir artısı olacak mıdır? yoksa sadece işi karmaşık hale mi getirmiş olacağım.

  • admin dedi ki:

    Merhaba Ahmet,
    Normal siteden kastın nedir? Eğer çok iyi bir şekilde framework yapısını kavradıysanız, karmaşıklık size uzak bir terimse her türlü projede kullanabilirsiniz. Sonuçta iyi bildiğiniz için zaman kaybı yaşatmaz. Ancak static siteler için, yani içeriği çok değişken olmayan siteler için kullanmanın anlamı olduğunu söyleyemem. Örneğin bir firma tanıtım sitesi için frameworke gerek yoktur. Zaten bir kere yazarsınız çok değişiklik gerektirmez. Ancak içeriği değişken dinamik siteler için kullanmanız her türlü fayda sağlayacaktır. En önemlisi de güvenliktir. Bunların hepsini dikkate aldığımızda bu sorunun cevabı biraz size bağlıdır.

  • ihsan dedi ki:

    Çok hoş bir anlatım öncelikle teşekkürler…

    Umarım anladığım nokta şu ; membership area ya direk yol yazıldığında ulaşamıyor çünkü redirect ile site controller ına gönderiliyor ve bu sayfa şifre girilmemişse atıyor.(umarım doğru anlamışımdır.. :))
    Burda takıldığım nokta şu :
    members alanımız birden fazla sayfadan oluşuyorsa hepsini site controllerına mı redirect etmek gerekecek.
    view klasörümde 5-6 sayfam daha var .. ki onlaraa veri tabanından belli verileri çekerek direkt gönderiyordum.. umarım problemimi anlatabildim..

  • admin dedi ki:

    İhsan,

    İzinsiz erişimleri engellemek için, bu kontrolün yapılması gerekmektedir. Site controllerını kullandığınızda bu işlem constructor içinde otomatik olarak yapılmaktadır. Farklı bir controller kullanırsanız onun constructor ınada yazmanız gerekmektedir.

  • erkan dedi ki:

    Merhaba

    form validate fonksiyonu localhostta çalışıyor fakat hostinge attığımızda şu hatayı veriyor :

    A PHP Error was encountered

    Severity: Notice

    Message: Trying to get property of non-object

    Filename: models/membership_model.php

    Line Number: 12

    bu hatanın sebebi ne olabilir .?

  • ahmet dedi ki:

    merhaba;
    derslerinizi okurken şunu farkettim, view içinde de sıkça framework ün sunduğu fonksiyonlar kullanılıyor. tasarımın farklı frameworklere taşınabilmesini mümkün kılmak istersek bu durum sorun çıkarır mı?

  • Mehmet dedi ki:

    Hocam benim pcde database oluşmadı veritabanı ismi ne oluyodu

  • muzaffer şenkal dedi ki:

    Malesef giriş yapmıyor. sebebi ise model dosyasındak
    $query->num_rows
    şeklinde yazılmıs şu şekilde düzeltirsek çalısacaktır.
    $query->num_rows()

  • Hilal dedi ki:

    Merhaba,

    $this->load->view(‘includes/template’,$data);

    yapınca

    An Error Was Encountered

    Unable to load the requested file: includes/template.php

    hata aldım ancak kodu şu şekilde değiştirdiğimde :

    $this->load->view(‘template’,$data);

    ve ayrıca template.php yi şuşekilde değiştiriğmde:

    load->view(‘header’);?>
    load->view($main_content);?>
    load->view(‘footer’);?>

    çalıştı. Yani include ları kaldırdım. Neden böyle oldu?

Yorum Bırakın!

Yorum yaz, yada kendi sitende trackback (Geri besleme) olarak ekle. Ayrıca RSS ile bu konuya üye olabilirsin. .

Nazik olun. Temiz tutun. Konu dışına çıkmayın. Spam yaratmayın.

Bu tagları kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Bloğumuz gavatarı desteklemektedir. Kendi gavatarınızı edinmek için lütfen Gravatar a üye olun.