CodeIgniter cookies üzerinde tuttuğu session değerlerini 4kb ile sınırlamıştır. Bu değeri aşan session bilgileri için veritabanı adres gösterilir.
Daha önce anlattığım alışveriş sepeti uygulamasında, cookie üzerinde tutacağımız oturum (session) bilgileri 4kb sınırını aştığı için veritabanına yazdırma zorunluluğumuz doğmuştu. Veritabanı üzerinde tuttuğumuz oturum bilgilerinin kullanılması durumunda aynı kullanıcının (daha doğrusu aynı IP numarasından bağlanan kullanıcının) tekrar gelmesi halinde veritabanı temizlenecektir. Bu durumda haliyle bir süre sonra veritabanında şişmeye neden olacaktır.
Öncelikle application/config dizinindeki config.php dosyasında yer alan $config['sess_use_database'] değişkenini TRUE yapıyoruz. Daha sonra application/config dizinindeki autoload.php dosyasında bulunan $autoload['libraries'] değişkenine array('session','database') değerini atıyoruz. Böylelikle CodeIgniter`a session değerlerini veritabanına yaz demiş oluyoruz. Ayrıca application/config dizini içinde database.php dosyasında veritabanımıza uygun gerekli ayarları da yapıyoruz.
Bundan sonraki işimiz application/libraries dizini içine MY_Session.php isimli bir dosya açmak olmalıdır. Dosyamızın içeriği aşağıdadır. Burada dikkat etmemiz gereken bir nokta da application/config dizini içinde config.php dosyasındaki $config['subclass_prefix'] değişkeninin varsayılan MY_ değerinde olması. Böylece CodeIgniter kütüphanelerinde yaptığımız değişiklikleri MY_ ön ekiyle yaptığımızı söylemiş oluyoruz.
<php
if (!defined('BASEPATH')) exit('No direct script access allowed');
class MY_Session extends CI_Session
{
// --------------------------------------------------------------------
/**
* Destroy the current session
*
* @access public
* @return void
*/
function sess_destroy()
{
//uc gun once eklenmis cookieler siliniyor.
$uc_gun_oncesi = time()-(3*24*60*60);
$this->CI->db->where('last_activity <', $uc_gun_oncesi);
$this->CI->db->delete($this->sess_table_name);
// Kill the session DB row
if ($this->sess_use_database === TRUE AND isset($this->userdata['session_id']))
{
$this->CI->db->where('session_id', $this->userdata['session_id']);
$this->CI->db->delete($this->sess_table_name);
}
// Kill the cookie
setcookie(
$this->sess_cookie_name,
addslashes(serialize(array())),
($this->now - 31500000),
$this->cookie_path,
$this->cookie_domain,
0
);
}
}
Burada sess_destroy() fonksiyonunu ihtiyacımıza göre düzenlemekteyiz. Eğer veritabanımız üzerinde 3 gün öncesine ait kayıt bulunmasını istemiyorsak öncelikle 3 gün öncesinin tarihini hesaplayıp, bunu veritabanındaki değerler ile karşılaştırarak siliyoruz. Geri kalan cümleler CodeIgniter orijinal cümleleriyle aynıdır.
Bundan sonra yapacağımız tek şey, Controller dosyasını yüklediğimizde ilk yüklenen method içinden bu fonksiyonu aşağıdaki gibi çağırmak olmalıdır.
$this->session->sess_destroy();
Böylece session kütüphanesini isteğimize göre yeniden düzenlemiş olduk. Burada anlattığım metodu geliştirerek CodeIgniter üzerinde değişiklik yapmanız mümkündür.
Yazarı : Fatih BAZMAN | Yorum Ekle | Etiketler : Session Veritabanı kütüphane
Türkiye