PHP’de oturum yönetimi, sayfalar arasında veriyi (değişkeni) kullanma imkanı sunan bir yöntemdir. Genellikle üyelik sistemlerinin bir parçası olarak kullanılmaktadır. Fakat üyelik dışında da birden fazla sayfaya veri göndermek içinde oturum kullanılmaktadır. Başka bir örnek de bir kullanıcı kayıt sisteminde kullanıcıdan adım adım kişisel verilerini almak olabilir. Örnekleri bu şekilde uzatmak mümkün.
PHP’de Oturum Nasıl Çalışır?
PHP’de oturum verileri $_SESSION süper global değişkeni içinde dizi olarak kaydedilir.Bir oturum session_start() fonksiyonu ile başlatılır. Oturum açıldığında PHP temporary klasörüne her kullanıcı için PHPSESSID ile eşsiz bir dosya açar ve oturumu başlatır. Böylelikle kullanıcı sayfalar arasında gezinti sağlarken temporary klasöründeki kullanıcıya ait olan dosyaya ulaşabilir.
Aynı şekilde oluşturulan PHPSESSID ile sunucu kullanıcının tarayıcısına kaydedilmesi için bu değeri cokie olarak gönderir. Bu şekilde oturum döngüsü sağlanmış olur.
PHP Oturum Fonsiyonları
- session_start :Oturum başlatır
- session_register : Süper global değişkene değer kaydeder. $_SESSION da kullanılabilir.
- session_destroy : Oturum verilerini yok eder.
En temel seviyede bir oturum kontrolü için yukarıdaki fonksiyonlar kullanılarak bir oturum yönetimi sağlanır.
Oturum Sınıfını Oluşturma
Yukarıdaki fonksiyonları kullanarak oturum başlatmak, yönetmek ve sonlandırmak mümkün fakat daha esnek kullanımlar ve farklı projeler içinde kullanmak için oturum yönetim sınıfı oluşturmak bir zorunluluktur. Bu şekilde yaparak oturum yönetimini her sayfada esnek bir şekilde kullanılabilir hale getirmiş oluruz.
1.Adım: Oturum sınıfı oluşturuyoruz.
1 2 3 4 5 6 7 |
<?php class Oturum { } |
2.Adım: Singleton tasarımı ile oturum açılışı için gerekli başlatma metodunu yazıyoruz. Oturum başlatıldıysa yeninden başlatmak yerine mevcut oturum üzerinden kullanıcı işlemleri devam eder.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
...... private static $oturum; /** * Oturumu başlatır. * *@return Object Oturum nesnesi */ public static function baslat() { if (self::$oturum==null) { self::$oturum = new Oturum(); } return self::$oturum; } /** * Oturum singleton pattern. * */ private function __construct() { session_start(); } |
3.Adım: Oturumun başlatılıp başlatılmadığı kontrolünü yapmak için kullanılabilecek bir metot yazdım.(fakat çok kullanılacak bir metot değil.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
............ /** * Oturum var mı kontrolü yapar. * *@return bool */ public function durum() { if(!session_id()) { return false; } return true; } |
4.Adım: Oturum başlatıldıktan sonra $_SESSION değişkenine veri ekleyerek sayfalar arasında taşıma işlemini gerçekleştiririz. Bunun için sınıfta ekle metodu oluşturduk. $kimlik ile değişken adı, $deger ile değişkene kaydedilecek veriyi belirtiyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
.............. /** * Oturuma yeni kimlik ekler * *@var string $kimlik *@var mix $deger */ public function ekle($kimlik,$deger) { if(!session_id()) { $hata='Oturum yok Oturum::baslat() yapınız.'; throw new Exception($hata); } $_SESSION[(string) $kimlik] = $deger; } |
5.Adım: $_SESSOIN içindeki verileri okumak için getir ismindeki metot’a $kimlik bilgisini paraketre olarak gönderip içindeki veriyi okuma işlemini gerçekleştiriyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
.......... /** * Oturumda kayıtlı kimliği getir * *@var string kimlik * *@return mixed $kimlik ile eşleşen kayıtlar */ public function getir($kimlik) { if(!session_id()) { $hata="Oturum yok Oturum::baslat() yapınız."; throw new Exception($hata); } if(isset($_SESSION[$kimlik])) { return $_SESSION[$kimlik]; } return null; } |
6.Adım: Mevcut oturumdaki tüm kayıtlı verileri dizi olarak okumak için tumu metodunu oluşturuldu.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
........... /** * Oturumdaki tüm listeyi getir * *@return array() * */ public function tumu() { if(!session_id()) { $hata="Oturum yok Oturum::baslat() yapınız."; throw new Exception($hata); } return $_SESSION; } |
7.Adım: Mevcut oturumu sonlandırmak için bosalt metodu oluşturuldu. Oturum verileri boşaltılıp, oturum sonlandırılıyor.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
/** * Oturumu boşaltır * *@retrun bool * */ public function bosalt() { if (session_id()) { session_unset(); session_destroy(); $_SESSION = array(); self::$oturum=null; return true; } return false; } |
8.Adım: Kayıtlı olan oturuma ait eşsiz kayıt numarasını okumak için oluşturuluş metot.
1 2 3 4 5 6 7 8 9 10 11 12 |
/** * Oturumun eşsiz kaydını getir. * *@return string * */ public function id() { return session_id(); } |
9.Adım (Test): Oturum sınıfı oluşturuldu. Test etmek için aşağıdaki gibi test kodları yazılabilir. Unutmadan belirteyim. Genel bir kullanımdır. Sayfada çıktı işlemi yapmadan önce yazılacak ilk kod oturum başlatma kodudur. Her sayfada oturumu kullanabilmek için Oturum::baslat() metodu çalıştırılması zorunludur.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
include 'oturum.php'; Oturum::baslat(); Oturum::ekle('isim','hayri'); Oturum::ekle('sifre','123456'); echo Oturum::getir('isim'); //hayri var_dump(Oturum::tumu()); /* hayriarray(2) { ["isim"]=> string(5) "hayri" ["sifre"]=> string(6) "123456" } */ Oturum::bosalt(); |
Oturum.php (Oturum Sınıfı)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
<?php final class Oturum { /** * * Oturum sınıfı https://www.yazilimbilisim.net * tarafından oluşturulmuştur. Özgürce kullanabilirsiniz. */ private static $oturum; /** * Oturumu başlatır. * *@return Object Oturum nesnesi */ public static function baslat() { if (self::$oturum==null) { self::$oturum = new Oturum(); } return self::$oturum; } /** * Oturum singleton pattern. * */ private function __construct() { session_start(); } /** * Oturum var mı kontrolü yapar. * *@return bool */ public function durum() { if(!session_id()) { return false; } return true; } /** * Oturuma yeni kimlik ekler * *@var string $kimlik *@var mix $deger */ public function ekle($kimlik,$deger) { if(!session_id()) { $hata='Oturum yok Oturum::baslat() yapınız.'; throw new Exception($hata); } $_SESSION[(string) $kimlik] = $deger; } /** * Oturumda kayıtlı kimliği getir * *@var string kimlik * *@return mixed $kimlik ile eşleşen kayıtlar */ public function getir($kimlik) { if(!session_id()) { $hata="Oturum yok Oturum::baslat() yapınız."; throw new Exception($hata); } if(isset($_SESSION[$kimlik])) { return $_SESSION[$kimlik]; } return null; } /** * Oturumdaki tüm listeyi getir * *@return array() * */ public function tumu() { if(!session_id()) { $hata="Oturum yok Oturum::baslat() yapınız."; throw new Exception($hata); } return $_SESSION; } /** * Oturumu boşaltır * *@retrun bool * */ public function bosalt() { if (session_id()) { session_unset(); session_destroy(); $_SESSION = array(); self::$oturum=null; return true; } return false; } /** * Oturumun eşsiz kaydını getir. * *@return string * */ public function id() { return session_id(); } } |