Session Kullanımı

Session yani oturum sayfalar arasın veri akışı için kullanılan ve genellikle geçici bir klasör içerisinde dosya oluşturarak çalışan bir yöntemdir. Bir ziyaretçi için kaydedilen veriler, yine aynı ziyaretçi tarafından her sayfada erişilebilir. "session_start()" "session_destroy()" fonksiyonları ve "$_SESSION" süper global değişkeni giriş düzeyinde bize yeterli olacaktır.


Session'a verinin nasıl ekleneceğini, nasıl bir hash tutulması gerektiğini artık bildiğimizi varsayarak, dikkatimizi session için yaptığım tanımıma çekmek istiyorum.
"Session yani oturum sayfalar arasın veri akışı için kullanılan ve genellikle geçici bir klasör içerisinde dosya oluşturarak çalışan bir yöntemdir."
Tanımda vurgulamak istediğim bir şey vardı, session kendi yöntemiyle çalışmak zorunda değildir.
session_save_handler adında bir fonksiyon var. Oldukça önemli güzel de bir fonksiyon. Bu fonksiyonla oturum üzerindeki işlemleri kendi dilediğimiz gibi yaptırabiliriz. Nasıl yani???

Önce veritabanımızı oluşturalı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. );


Şimdi de az önce bahsettiğimi gerçekleştirelim
PHP kodu
  1. <?php
  2. // oturum_fonksiyonlari.php dosyası
  3. function oturum_ac($depo,$oturum_ismi){
  4. /* depo dosyaların tutulduğu klasör
  5. oturum ismi de PHPSESSID ama biz bunları kullanmayacaz */
  6. global $baglanti;
  7. if(!defined('VERITABANI_BAGLANTISI')){
  8. include('db_ayarlari.php.inc');
  9. $baglanti = @mysql_connect($adres, $kullanici, $sifre);
  10. if($baglanti)
  11. {
  12. $dbselect = @mysql_select_db($veritabani);
  13. if(!$dbselect)
  14. {
  15. @mysql_close($baglanti);
  16. $baglanti = $dbselect;
  17. }
  18. return $baglanti;
  19. }
  20. return false;
  21. }
  22. return $baglanti;
  23. }
  24.  
  25. function oturum_kapat() {
  26. global $baglanti;
  27. return mysql_close($baglanti);
  28. }
  29.  
  30. function oturum_oku($sessid) {
  31. global $baglanti;
  32. $sorgu = mysql_query("SELECT veri FROM oturum WHERE sessid = '".mysql_real_escape_string($sessid)."' LIMIT 1");
  33. if($sorgu!==false) {
  34. $veridb=mysql_fetch_assoc($sorgu);
  35. // veri okunduğunda da oturum süresi uzatılması istenirse
  36. mysql_query("UPDATE oturum SET sonerisim=".time()." WHERE sessid = '".mysql_real_escape_string($sessid)."' LIMIT 1");
  37. $return $veridb['veri'];
  38. }
  39. return false;
  40. }
  41.  
  42. function oturum_yaz($sessid,$veri){
  43. global $baglanti;
  44. mysql_query("REPLACE INTO oturum SET sessid = '".mysql_real_escape_string($sessid)."', sonerisim = ".time().", veri = '".mysql_real_escape_string($veri)."'",$baglanti);
  45. return (mysql_affected_rows($baglanti)) ? true : false;
  46. }
  47.  
  48. function oturum_sil($sessid) {
  49. global $baglanti;
  50. mysql_query("DELETE FROM oturum WHERE sessid='".mysql_real_escape_string($sessid)."'",$baglanti);
  51. return (mysql_affected_rows($baglanti)) ? true : false;
  52. }
  53.  
  54. function oturum_temizlik($gecerlilik_suresi){
  55. global $baglanti;
  56. mysql_query("DELETE FROM oturum WHERE sonerisim < '".(time()-$gecerlilik_suresi)."'",$baglanti);
  57. return (mysql_affected_rows($baglanti)) ? true : false;
  58. }
  59. ?>


Bütün gerekli şeyleri yaptığımıza göre artık esas fonksiyonumuzu çalıştırıp, oturumu dosyalarla değil, veritabanıyla yönetmenin gururunu yaşayabiliriz :)

PHP kodu
  1. <?php
  2. include('oturum_fonksiyonlari.php');
  3. session_set_save_handler("oturum_ac", "oturum_kapat", "oturum_oku", "oturum_oku", "oturum_sil", "oturum_temizlik");
  4. $_SESSION['seyranli']='Okuduğunuz için teşekkür ederim';
  5. ?>


Veritabanına baktığınızda oturum tablosunda beni görebilrisiniz :)

Fonksiyonlarla yapıldığında bu şekilde oluyo. Sınıflarla yaparken dikkat edilmesi gereken ufak şeyler var. Bu kadar yazdım madem, kodları bir arada toplayıp sınıf olarak sunarım. Sınıf kullanımını anlatırken o dikkat edilecek hususlar neydi, ne yaptım gibisinden bahsederim.

1 2 3


Session Kullanımı Oy Sayısı: 24 Puan: 8.58/ 10.00

Etiketler

session kullanimi , php session kullanimi , c session kullanimi , php session ornek , session php kullanimi , php de session kullanimi , session kullanimi php , session suresini uzatma , php session ornekleri , session ornekleri ,

deathisonitsway03 Ocak 2010 Pazar 08:30:40


@ dosyayı calıstırdıgımda session-cannot header gibi bir hata alıyorum diyorsanız...bunun cozumu olarak konuda da gectiği gibi ; dosyanızın en ustune <? ob_Start(); ?> koyun ki, http çıktısını tampona kaşelemiş olun (flush)


emin07 Ocak 2010 Perşembe 23:37:42


tebrik ederim güzel makale olmuş session konusunda birazdağa bilgi sahibi oldum. sınıflarla veri tabanı kullanarak nasıl oturum kontrolu yapılacağı hakkında bir makale yazarsanız memnun olurum . ayrıca sormak istediğim 2 soru var. bazıları çerez kullanarak yapıyor bu oturum kontrollerini.kimisi sadece sesson kullanarak yapıyor bazısı ise hem sesson hemde çerezleri birlikte kullanıyor. sorum şu sizce sağlam bir sitede oturum kontrolü nasıl olmalıdır. teşekkürler...


Gündüz Can YILMAZ08 Ocak 2010 Cuma 16:18:02


Kullanıcı idsi, yetkisi, gerekiyorsa hash leri gibi bilgilerin sessionda tutulması daha güvenli olur ama saglam bir hash olusturduktan sonra çerez kullanımının da sakıncası olmaz. Kullanıcı çerezini çaldırırsa bile çerezin kullanımına izin verilemeyecek şekilde hashleyebilirisiniz. md5('!SEYRANLI!'.$_SERVER['REMOTE_ADDR'].$sifre); şeklindeki bir hash i çerez için de kullanabilirsiniz.


alper Gezgin02 Kasım 2010 Salı 04:44:25


merhabalar verdiğiniz bilgiler için teşekkür ederim.
hash ilkkez bu makalede gördüm ve localhostta denediğimde hata verdi, sunucuda ise sayfayı açmadı.

hash kullanmak için ne yapmak lazım. ikincisi ise
hash yerine kişinin ip adresini databaseye kaydetsek ve databasedeki veriye göre o olup olmadığnı anlasam güvenlik açığı olurmu?


Gündüz Can YILMAZ02 Kasım 2010 Salı 04:49:27


sayfa açmadığında da hata vermiştir ama ne hatası olduğunu görmeden neden olduğu hakkında fikir yürütmem zor.

ip yi veritabanına da kaydedebilrisiniz tabi ancak derme çatma bi yapı olur. kodlardaki hash zaten deneme amaçlı idi, aslında $_SESSION['ip']=$_SERVER['REMOTE_ADDR']; olarak kaydetmeniz yeterli. kontrol yaparken de if($_SESSION['ip']!=$_SERVER['REMOTE_ADDR'])die.... şeklinde ip nin doğruluğundan emin olabilirsiniz


Alper Gezgin17 Kasım 2010 Çarşamba 04:18:30


Sayın Yılmaz Cevab için teşekkür ederim gösterdiğiniz gibi ip kontrolü ile yapmak daha iyi gibi geldi bana.

birde localhost da hata veriyor demiştim hata mesajı şu şekilde;

Parse error: parse error, unexpected T_RETURN in C:AppServwwwlogin.php on line 1

dediğim gibi sunucuya atınca hata vermedi ama sayfada bir işlem yapmadı bembayaz sayfa çıktı.

bu hatanın sebebini bulamadım eğer siz biliyorsanız yazarsanız çok daha iyi olur ne de olsa bir çok kişide bu hata mesajı ile karşılaştığnıda düşünmek gerek.


ali şahinöz25 Mart 2011 Cuma 06:49:23


ben hiç bir şey anlamadın




Yorumunuz