Yükleniyor

Php session genellikle oturumları yönetmek, sayfalar arası veri göndermek için kullanılır.

  • session_start() komutu her zaman için sayfanın en başına yazılmalıdır. Daha sonra html, php, css, jquery vb. kodlar yazılmalıdır.
  • Global bir değişkendir. Yani tanımladıktan sonra istediğiniz yerde kullanabilirsiniz.
  • Güvenlik olarak sunucu bilgisayarının güvenlik duvarını kullanılır.
  • Session oluşturulduğu zaman; oluşturulan session bilgileri sunucu bilgisayarı üzerinde bir text dosyası içerisinde tutulur.
  • Kullanıcı oturum kapattığında, siz özel bir komut ile sildiğiniz de ve ya tarayıcı tamamen kapatıldığında silinir (tarayıcı arka planda çalıştığı sürece session tutulmaya devam edilir.).
  • Çerezlerdeki (cookie) gibi süre ayarlayamazsınız.

Php Session ve Cookie Arasındaki Fark

Kullanım ve mantık olarak tamamen çerezler(cookie) ile aynıdır;

  • Sessionlar sunucu bilgisayarında tutulur. Bu yüzden erişilmesi zordur, güvenliği daha yüksektir.
  • Cookie ler kullanıcının bilgisayarında(tarayıcı dosyalarının olduğu yerde) tutulur. Bu yüzden erişilmesi kolaydır, güvenliği düşüktür.

  • Sessionlarda zaman ayarı yoktur. Tarayıcı tamamen kapatıldığında, kullanıcı oturumu sonlandırdığında veya özel bir komut ile sildiğinizde silinir.
  • Cookie lerde zaman ayarı vardır. Dilediğiniz zamana son kullanma tarihi verirsiniz ve o tarihe kadar verileri tutmaya devam eder. Son kullanma tarihi geldiğinde silinir.

  • Sessionda kaydedilen değerin adı ve değer tarayıcıya gönderilmez. Onun yerine PHPSESSID adında bir çerez tanımlanır ve içerisine değer olarak ise şifrelenmiş ve oldukça uzun olan session id değeri atanır. Bilgileri bu şekilde sunucu bilgisayarında tutar ve girenlerin PHPSESSID kimliğine göre kime ait olduklarını bulur ve yeniden düzenler.
  • Cookie lerde ise tanımlanan çerezin adı ve değeri tarayıcılara açıkca gönderilir. Bu değerler istenilen süre boyunca tarayıcıda açık bir şekilde saklanır.

Bu sebeplerden dolayı üyelik sistemleri, e-ticaret sistemleri, ödeme sistemleri gibi güvenliğin önemli olduğu noktalarda session kullanılması gerekmektedir hatta kullanımı zorunludur.

Php Session Oluşturma & Başlatma

$_SESSION[""] kullanmadan önce kullanılmak istenilen tüm sayfalarda en tepesine tüm kodlardan önce session_start() komutu yazılır. Bu komut o sayfa içerisinde session kullanılacağını belirtir ve sunucuyu hazırlar. session_start() yazmadığınız taktirde sessionu kullanamazsınız.

<?php
session_start();
//$_SESSION["sessionun_adi"];
$_SESSION["ilk_sessionum"] = "Merhaba Dünya !";
echo $_SESSION["ilk_sessionum"]; // Çıktı: Merhaba Dünya !
?>
<?php
session_start(); //BU SAYFADA $_SESSION[""] KULLANACAĞIMIZI BELİRTTİK.
$_SESSION["bilgi"] = "Test Session";
?>
<!doctype html>
<html>
  <head>
    <title>Session HTML İçerisinde Kullanımı</title>
  </head>
  <body>
    <p><strong>Session değeri:</strong> <?php echo $_SESSION["bilgi"]; ?></p>
  </body>
</html>

Php Session Kullanımı & Session Kontrolü

Session ile proje klasörünüzün altındaki .php dosyalarına birbirleri ile haberleşmek için değişken, veri vb. değerler gönderebilirsiniz. En çok tercih edilme sebeblerindendir.

localhost'unuzda çalıştığınız zaman sessionlar komple www dizinini görmektedir çünkü bilgisayarınızdaki sanal sunucunuz www dizinidir. Bu yüzden localhostta diğer projeye geçtiğinizde aynı session isimlerini kullandıysanız tanımlanmış olacaktır. Gerçek sunucuda her domaine ayrı bölüm açıldığı için problem yaşanmamaktadır.

sayfa1.php olarak kayıt edin.
<?php
session_start(); // Sessionu başlattık.
?>
<!doctype html>
<html>
  <head>
    <title>Session Kullanımı</title>
  </head>
  <body>
    <?php
      $_SESSION["metin"] = "Test Metin Session Değeri";
      $_SESSION["sayi1"] = 10;
      $_SESSION["sayi2"] = 5;
    ?>
    <p>Şuan 1. Sayfadasınız ve "metin" Session değeri : <?php echo $_SESSION["metin"]; ?></p>
    <br />
    <a href="sayfa2.php">2.Sayfaya Git </a>
  </body>
</html>
sayfa2.php olarak kayıt edin.
<?php
session_start(); // Sessionu başlattık.
?>
<!doctype html>
<html>
  <head>
    <title>Session Kullanımı</title>
  </head>
  <body>
    <?php
        $toplam = $_SESSION["sayi1"] + $_SESSION["sayi2"];
        /*
           2 sayfada da session başlattığımız ve aynı proje dizininde olduğu için session ile farklı sayfalara değer gönderebildik. 
           Toplam çıktısı olarak 15 çıkacaktır.
        */
    ?>
    <p>Şuan 2. Sayfadasınız. "sayi1" ve "sayi2" Sessionların toplamı : <?php echo $toplam; ?></p>
    <?php
    if(isset($_SESSION["metin"])){
        //isset() bildiğiniz gibi bir değişkenin tanımlı olup olmadığını kontrol ediyor.
        //sayfa1.php sayfasında tanımlandığı için burada tanımlı olarak çalışacaktır.
    ?>
        <p>"metin" adında session tanımlanmıştır ve Eski Değer => <?php echo $_SESSION["metin"]; ?></p>
    <?php
        $_SESSION["metin"] = date("Y-m-d H:i:s") . " Tarihinde ve Saatinde Yeni Değer Atandı.";
        echo '<p>"metin" adında session tanımlanmıştır ve Yeni Değer => ' . $_SESSION["metin"] . '</p>';
        //bundan sonra $_SESSION["metin"] session değeri yukarıdaki gibi atanmıştır. Her sayfa yenilendiğinde yeni değer atamaya devam edecektir.
    }
    ?>
    <br />
    <a href="sayfa1.php">1.Sayfaya Git </a>
  </body>
</html>

Örneği buradan indirebilirsiniz.

Php Session Silme ve Yok Etme

unset() fonksiyonu ile tanımlanmış olan bir sessionu silip yok edebilirsiniz.

<?php
session_start();
//unset($_SESSION["sessionunuz"]);
$_SESSION["birinci_session"] = "Merhaba Dünya !";
$_SESSION["ikinci_session"] = "Hello World !";

var_dump($_SESSION);
//Tanımlı olan tüm sessionları ekrana bastık.
//var_dump kurtarıcı bir fonksiyondur. Dizilerde, sessionlarda, tanımlı fonksiyonlarda, xml, soap vb. bir çok alanda kullanabilirsiniz.
/* Çıktı:
  array (size=2)
    'birinci_session' => string 'Merhaba Dünya !' (length=16)
    'ikinci_session' => string 'Hello World !' (length=13)
*/
unset($_SESSION["ikinci_session"]);
//unset ile sadece bir sessionu silebilirsiniz.
//$_SESSION["ikinci_session"] 'nu silip yok ettik.
var_dump($_SESSION);
/* Çıktı:
  array (size=1)
    'birinci_session' => string 'Merhaba Dünya !' (length=
*/
?>

session_destroy() fonksiyonu tüm tanımlı sessionları siler, öldürür.

Kullandıktan sonra session perde arkasında yok edilir. Yani session_destroy() kullandıktan sonra aynı sayfada gene session değeri gelir ancak farklı sayfada aynı sessionu çağırdığınızda gelmez. Bundan dolayı oturum kapatma işlemlerinde session_destroy() çalıştırıldıktan sonra sayfa tekrar yönlendirilir.

<?php
session_start();
$_SESSION["birinci_session"] = "Merhaba Dünya !";
$_SESSION["ikinci_session"] = "Hello World !";
session_destroy();
//Şuan tüm sessionlar bu sayfa için öldü.
//Ancak bu sayfada session_destroy(); dan sonra sessionu çağırırsanız gelecektir.
//Başka bir sayfaya yönlendiğinde o sayfada gelmeyecektir çünkü silindi, yok oldu.
?>

Php Session Diziler

Php sessionda diziler çoğunlukla kullanılmaktadır. Bundan dolayı bu konuya da değinme gereği duyduk.

<?php
session_start();
$_SESSION["programlamaDilleri"] = array("PHP", "JAVA", "JAVASCRİPT", "PYTHON" , "C", "DART"); 

echo $_SESSION["programlamaDilleri"][0] . "<br />"; //Çıktı: PHP
echo $_SESSION["programlamaDilleri"][1] . "<br />"; //Çıktı: JAVA
echo $_SESSION["programlamaDilleri"][2] . "<br />"; //Çıktı: JAVASCRİPT
echo $_SESSION["programlamaDilleri"][3] . "<br />"; //Çıktı: PYTHON
echo $_SESSION["programlamaDilleri"][4] . "<br />"; //Çıktı: C
echo $_SESSION["programlamaDilleri"][5] . "<br />"; //Çıktı: DART

var_dump($_SESSION["programlamaDilleri"]);
/* Çıktı:
  array (size=6)
    0 => string 'PHP' (length=3)
    1 => string 'JAVA' (length=4)
    2 => string 'JAVASCRİPT' (length=11)
    3 => string 'PYTHON' (length=6)
    4 => string 'C' (length=1)
    5 => string 'DART' (length=4)
*/
?>

Gördüğünüz gibi normal dizi tanımlaması nasılsa sessionlarda da aynı şekilde kullanılmaktadır. Amaç farklı sayfalara dizi deki değerleri veya komple diziyi gönderebilmek.

Php Sessionları Süreli Yapma

Php sessionlarda zaman ayarı eklemek isteyebilirsiniz. Oturumu kendiniz kullanıcı tarayıcıyı kapatmadan sonlandırmak isteyebilirsiniz ve ya bir bilgiyi kısa süreliğine tutup daha sonra silmek isteyebilirsiniz. Böyle durumlarda kenidniz manuel zaman ayarı vermeniz gerekmektedir.

Mantık tamamen basit. Sessionun oluşturulduğu zamanı bilmemiz gerekiyor. Bu yüzden oluşturmadaki zamanı başka bir sessiona kayıt ediyoruz ve sayfa her yenilendiğinde şimdiki zaman ile kontrol ediyoruz.

<?php 
session_start();

$_SESSION["sure"] = time() + 20; //şuanki zamana 20 sn ye ekledik.
$_SESSION["uyeAdi"] = "Php Mutfagi";
// YUKARIDAKİ KODU 1 KERELİĞİNE ÇALIŞTIRIN
// DAHA SONRA AÇIKLAMA SATIRI HALİNE GETİRİN.
echo $_SESSION["uyeAdi"] . "<br />";


/*
### YUKARIDAKİ KODU 1 KERE ÇALIŞTIRINCA BU KODLARI AÇIKLAMA SATIRINDAN ÇIKARTIN
### SAYFAYI BELİRLİ ARALIKLARLA YENİLEYİN
### YUKARIDAKİ KOD ÇALIŞTIKTAN 20 SN SONRA İF ŞARTINI SAĞLAYACAKTIR.

if($_SESSION["sure"] < time()){
	//EĞER TANIMLADIĞIMIZ SÜRE ŞUANKİ ZAMANDAN KÜÇÜKSE YANİ GEÇMİŞ ZAMANSA SESSİON SONLANACAK.
	unset($_SESSION["sure"]);
	unset($_SESSION["uyeAdi"]);
	// VEYA => session_destroy();
	echo "ZAMAN AŞIMINA UĞRANDI.";
}
else echo "HALA SÜREYİ AŞMADINIZ.";
*/
?>