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


MySQL kullanan Session Sınıfı Oy Sayısı: 17 Puan: 7.53/ 10.00

Etiketler

mysql session , session mysql , php session sinifi , session sinifi , mysql session kullanimi , php session sonlandirma , php session mysql , php mysql session , php oturum sinifi , php session class ,

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


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


Gündüz Can YILMAZ05 Şubat 2010 Cuma 09: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


alper c13 Eylül 2011 Salı 03:32:54


merhabalar.

class ı ufak bi projede kullanmak üzere değerlendirmeye çalıştım. bi kaç ufak hata var gibi geldi bana belirtmek istedim.

costructor da
session_set_save_handler(array('oturum', 'ac'),
array('oturum', 'kapat'),
array('oturum', 'oku'),
array('oturum', 'yaz'),
array('oturum', 'yoket'),
array('oturum', 'temizlik')
);

demişiz fakat class ın içiinde 'ac' diye bi fonksiyon yok 'oturum_ac' var bunun bu sorunu fonksiyonun ismini ac yaparak düzelttim.

mysql_affected_row() yerine effected demişiz ufak bi typo ama runtime da sıkıntı yapıyor tabi =) .

aslında class ı anadomain ile subdomainler arası ortak session oluşturmak için kullanmayı düşünmüştüm. php nin dahili session u bunu yapamıyor. mysql tarafında belki aşarım diye düşündüm ama sorunu yine aşamadım. gerçekten ilginç bi sorun ne yaparım onla ilgili de bilemiyorum =( .


Gündüz Can YILMAZ13 Eylül 2011 Salı 14:40:24


Alper Bey geri bildiriminiz için teşekkür ederim. Kendi sistemimden çıkartırken değiştirmem gereken yerler oluyor, hal böyle iken de arada farkına dahi varmadığım hatalar yapıyorum. Bahsettiğiniz hatayı düzelttim.

Eğer sınıfı kullanacaksanız, __consturct() metodunda, session_starttan önce ini_set("session.cookie_domain", ".domainAdiniz.com"); yazmanız gerekiyor. daha duyarlı hale getirmek isterseniz domaini yazmak yerine $_SERVEr değişkeninden alabilirsiniz


Fatih YILDIRIM17 Nisan 2012 Salı 04:48:09


Bu class ı bir projede kullanırken nasıl kullanacağımız konusunda bilgi yazarmısınız lütfen. Mesela sayfaya giriş ve çıkışları nasıl yaptırmamız gerekiyor. Yardımcı olursanız sevinirim


Gündüz Can YILMAZ20 Nisan 2012 Cuma 11:49:21


Fatih Bey kullanımda bir fark yok, session sınıfını çağırdıktan sonra sıradan session kodlarını kullanıyorsunuz.
include 'class-oturum.php';
new oturum();
bu iki satırı ekledikten sonra siz normal
$_SESSION['deneme']='123456';
yazdığınızda o veritabanına işlenecektir.




Yorumunuz