MySQL kullanan Session Sınıfı

Unutmadan yazmak istediğim bir kaç husus var. O yüzden de yarım birşey bırakmayım diye, tez çalışmamın içinden oturum sınıfımı çıkarıp, kullanılabilir hale getirdim. Bundan önceki yazımda mysql'in nasıl session için araç olacağını anlatmıştım. Şimdi ise bunu nasıl sınıf aracılığı ile yapacağımızı anlatalım.


Öncelikle http://www.cnylmz.net/php/session-kullanimi-27/3.html adresindeki bilgilere bakmak gerek çünkü oradakilerin üstünden gideceğim.

Tablo olarak aşağıdaki tabloyu kullanalım

SQL kodu
  1. CREATE TABLE IF NOT EXISTS `oturum` (
  2. `sessid` varchar(255) NOT NULL,
  3. `sonerisim` int(10) UNSIGNED NOT NULL DEFAULT '0',
  4. `veri` text,
  5. PRIMARY KEY (`sessid`)
  6. );

Zamanla anahtar yükünün artmasından rahatsız olursanız, tavsiye etmesem de sessid alanınını anahtar olmaktan çıkarabilirsiniz..

session_set_save_handler fonksiyonunun string parametreler alarak çalıştığını  görmüştük ancak fonksiyon yerine sınıf kullanacaksak, 0. indisi sınfın 1.indisi ise fonksiyonun adını taşıyacak şekilde dizi parametreler göndermemiz gerekir. Yani

PHP kodu
  1. session_set_save_handler("oturum_ac", "oturum_kapat","oturum_oku",
  2. "oturum_oku", "oturum_sil", "oturum_temizlik");

yerine

PHP kodu
  1. session_set_save_handler(array('oturum', 'ac'),array('oturum', 'kapat'),
  2. array('oturum', 'oku'),array('oturum', 'yaz'),array('oturum', 'yoket'),array('oturum', 'temizlik'));

kullanacağız.

Bir önemli husus da şu. PHP 5.0.5 ten bu yana(php.net bilgisi) oturum bilgilerinin kaydı sınıfların yok edilmesinin ardından gelen birşeymiş. Yani biz sınıf kullanmaya çalışıyoruz ama sınıflar zaten yok edilmiş olduğundan kullanamıyoruz. O yüzden de php nin kendini sonlandırmadan önce bizim oturum bilgilerinin kaydetmesini istiyoruz. Aslında benim aklımdaki session sınıfına __destruct fonksiyonu ekleyip, yok edilme anında kayıtların yapılmasıydı. Ne var ki kayıtı da başka bir sınıf aracılığı ile yaptığımdan çalışmadı. Belki şu haliyle çalışabilir. Yine de en garantili çözüm olarak
register_shutdown_function fonksiyonunu gördüm. Bu fonksiyon ile oturum işlemlerinin sonlanmasını daha öne aldım.

Bu işler bitince de session_start(); demenin vakti geliyor. Artık session bilgilerimiz hiç bir dosyaya yazılmıyor. Tüm işlerimizi mysql hallediyor. Böylece hem session için dosya kaydetmekten, hem de online kaç kişi var görelim gibisinden bir niyetle veritabanı kullanmaktan kurtulup her işimizi tek yolla hallediyoruz.

Daha şık durması için de üstteki kodları fonksiyonumuzun oluşturulma sınıfı olan __construct() sınıfına ekliyoruz ve işimiz bitiyo. Zaten diğer fonksiyonlar bir önceki yazı da anlatılmıştır. Sınıf aşağıda umarım işinize yarar.


Dosya halinde indirmek için TIKLAYIN

Sınıfın içeriği bir sonraki sayfada yazmaktadır.

1 2


Okunma: 516 , Oy Sayısı: 14 , Puan: 7.21

Etiketler

mysql session , php sinif deposu , session sinifi , replace into , php session sonlandirma ,

0xyGen04 Şubat 2010 Perşembe 16:42:46


Can abi,
REPLACE INTO ve UPDATE table SET arasındaki fark nedir acaba ?
||


Gündüz Can YILMAZ05 Şubat 2010 Cuma 18:27:54


replace into kullandığımızda eğer aradığımız kayıt varsa onu siler ve yeni verileri ekler, zaten veri yoksa insert işlemi yapar. Bunu update ile yapmamız için ya önce var mı diye kontrol sorgusu yazıp varsa update yoksa insert yapmalıyız. Ha tabi INSERT INTO .... ON DUPLICATE KEY şeklinde kullanırsak daha şık olur. Silmek yerine direk update kullanmış oluruz. O an neden replace yazdığımı hatırlamıyorum ama şu an olsa o satırı on duplicate key kullanarak yazardım
||




Yorumunuz