Pazartesi, 7 Eylül 2009

Session Kütüphanesi ve Kullanımı

 

Siteye gelen ziyaretçilerin site içinde takip etmek, site genelinde onları tanımak için CodeIgniter session (oturum) sınıfı hazırlamıştır. Hazır pakette yüklü olarak gelemyen bu sınıfı, applicaiton/config/autoload.php dosyası içindeki libraries değişkenine yükleyeceğimiz gibi ($autoload['libraries'] = array('session')), Controller dosyamız içinden $this->load->libraries('session'); komutu ile de yükleyebiliriz.

CodeIgniter, her ziyaretçiye kendi ürettiği bir session ID değeri atar. Böylelikle her kullanıcının site içindeki hareketleri izlenir. Siteye giren ziyaretçinin geçerli session bilgileri olup olmadığı ilk önce kontrol edilir. Geçerli bilgiler yoksa yeni değerler üretilerek cookie olarak yazılır. Eğer geçerli değerler varsa session kütüphanesindeki bu bilgiler cookie'lerden temin edilerek yenilenir. Her iki durumda da session ID değeri yeniden oluşturulur.

Session değerlerine bilgi eklemek için set_userdata metodunu kullanırız. Bu metoda değişken göndermenin en pratik yolu dizi kullanmaktır:

 $newdata = array(
        `username`  => `johndoe`,
        `email`     => `johndoe@some-site.com`,
        `logged_in` => TRUE
       );
 $this->session->set_userdata($newdata);

Session kütüphanesinden bilgi çekmek için ise userdata metodunu kullanırız. Mesela yukarıdaki kodlar ile yüklediğimiz session değerlerinden username değerine çekmek istersek aşağıdaki cümleyi kullanmamız gerekir:

$this->session->userdata('username');

Tuttuğumuz bilgileri silmek istersek kullanabileceğimiz iki yol vardır. Eğer isim isim sileceksek:

$this->session->unset_userdata('username');

tamamını sileceksek aşağıdaki kodu kullanmalıyız:

$this->session->sess_destroy();

CodeIgniter Session kütüphanesi kullanarak Flashdata isimli bu opsyion yardımı ile değişik controller dosyaları arasında da istediğimiz sonuç mesajlarını görüntüleyebiliriz. Örneğin kullanıcının bir form dosyasında yaptığı bir değişiklik sonucunda oluşan mesajı Flashdata`ya atalım:

$this->session->set_flashdata(`mesaj`, `Üyeliğiniz kayıt edildi.`);

Sonrasında bu değeri ekrana bastırmak istersek View dosyamız içine aşağıdaki satırı yazmamız yeterlidir:

$this->session->flashdata(`mesaj`);

Session değerlerini eğer veritabanımızda tutmak istersek, application/config dizini altındaki config.php dosyamızda bulunan satırı aşağıdaki gibi değişmemiz gereklidir:

$config['sess_use_database'] = TRUE;

Bunun yanında, veritabanı üzerinde oluşturacağımız tablo şablunu ise 1.7.0 ve üzerindeki versiyonlar için aşağıdadır:

CREATE TABLE IF NOT EXISTS  `ci_sessions` (
 session_id varchar(40) DEFAULT '0' NOT NULL,
 ip_address varchar(16) DEFAULT '0' NOT NULL,
 user_agent varchar(50) NOT NULL,
 last_activity int(10) unsigned DEFAULT 0 NOT NULL,
 user_data text NOT NULL,
 PRIMARY KEY (session_id)
);

Son olarak önemli bir hatırlatmayı etmeden geçemeyeceğim: eğer arama motorları tarafından sitemizin içeriğinin indekslenmesini istiyorsak, içeriğin görüntülenmesinde ihtiyaç olan hiçbir değişkeni session değeri olarak TUTMAMAMIZ gereklidir. Diyelim çok dili olan bir site yaptıysanız ve sayfaların görüntülenmesinde dil değişkenine ihtiyacınız varsa (tr, en, de gibi), bu değişken mutlaka url satırında görülmelidir. Session değişkeni olarak kullanıcıya özel yapıldığında arama motorları tarafından sayfalarını indekslenemeyebilir.

Yorumlar

Teşekkürler
Mukemmel anlatmışısınız

Yorum Ekle