PHP

PHP Oturum Yönetimi

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.

<?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.

   ...... 
  
   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.)

  ............

    /**
     * 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.

   ..............   

     /**
     * 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.

   ..........

     /**
     * 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.

   ...........

    /**
     * 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.

    /**
     * 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.

    /**
     * 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.

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ı)

<?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();
    } 
}

 

 

 

Yorum Yap