PHP'de Oturum (Session) Yönetimi

Dikkat: Bu yazının yazılma tarihinin üzerinden en az 60 gün geçmiş. İçerisindeki bilgiler güncelliğini yitirmiş olabilir. Yorumları ve güncellemeleri göz önünde bulundurarak yazıyı takip ediniz.
PHP'de Oturum (Session) Yönetimi

PHP'nin olmazsa olmazı nerdeyse her php ile kodlanan sayfada bulunan oturum (session) yönetimi hakkında sizlere bilgi vereceğim. PHP'de 5 tane oturum yönetimi fonksiyonu vardır. Bu oturum yönetim fonksiyonları ve dökümantasyon bağlantıları :
session_start()
session_register()
session_is_registered()
session_unregister()
session_destroy()

Şimdi bunların anlatımına geçelim :

session_start()

Bu fonksiyonu oturumları kullanıcağımız her sayfanın başında belirtmeliyiz. Bu fonksiyon kullanıcı ilk defa giriyorsa kullanıcı için serverda bir dosya yaratır ve kullanıma hazırlar. Eğer daha önce girmişse onu kullanmaya hazırlar sadece. Her kullanıcı için uzun bir kod üretir. Bu kod sayılardan ve harflerden oluşur.
session_start();
Eğer php.ini dosyasında otomatik olarak oturum başlatma seçeneği aktif değilse bu işlemi yapmak zorundayız. Oturum fonksiyonları eğer bir oturum açılmamışsa (session_start) hata verecektir. Her sayfanızın başında bu fonksiyonu çağırarak bu sorunu rahatlikla çözebilirsiniz. Öneri olarak, her sayfanızda çalıştırdığınız (include) sayfanız varsa bu sayfaya ekleyin.

session_register()

Sunucuda sizin için açılmış olan dosyaya bir değer yazar. Aynı cookie gibi işler ancak dosyalar zamana göre silinmez, kullanıcı oturumunu kapatınca silinirler. Kullanıcının oturum kapatması ise, o andaki tarayıcı programının oturumu kapatması ile olur. Çoğu tarayıcı, oturumunu tüm pencereleri kapandığı zaman kapatmış olur.
$isim = "nazim";
session_register("isim");
$isim değerini nazim olarak atayıp sonra da oturumumuza kaydettik.

Oturum değişkenleri ve değerleri cookie'ler gibi bir dizide tutulur. $_SESSION ($HTTP_SESSION_VARS) dizisidir. Bu dizinin normal bir diziden hiçbir farkı yoktur. Atamaları da buna benzer bir teknik ile yapabiliriz.
session_register("isim");
$_SESSION["isim"] = "mfyz";
Önce $isim diye bir oturum bilgisi yaratıp sonra bilgiyi güncelledik.

session_is_registered()

Bir oturumun kayıtlı olup olmadığını veya bir oturum değişkeninin kaydedilip edilmediğini öğrenmemize yaran bir fonksiyondur.
if( session_is_registered("isim") ){
  echo "isim oturumu kayıtlı";
}else{
  echo "isim oturumu kayıtlı degil";
}
"isim" oturumunun kayıtlı olup olmadığına bakar.

session_unregister()

Kaydettiğiniz bir oturum değişkenini silmek için kullanılır.
session_unregister("isim");
Daha önce oluşturduğumuz isim adlı oturum bilgisini siler.

session_destroy()

Kayıtlı olan tüm oturum bilgilerini yok eder.
session_destroy();
Geçerli olan tüm oturum verilerini yok eder.


Şimdi ufak bir uygulama yapalım :

Giriş/Çıkış İşlemi

Günümüzde neredeyse her sitede bi üyelik sistemi var (forumu veya interaktif hizmeti olmamasina rağmen), bence çoğu site için gereksiz.
Basitçe bir giriş/çıkış sistemi yapalım. Bu iş için giris.php, cikis.php, index.php dosyalarimiz olacak.
<form action="giris.php" method="post">
  <input type="text" name="ad">
  <input type="submit" value="Giris">
</form>
Basit bir index sayfamız var. Burada giriş formu var. Bunu sitenizin istediğiniz köşesine koyabilirsiniz.
Ziyaretçi adını girip Giris'e tıkladığı zaman giris.php dosyasına post edilecek.
<?php

// bilgiyi alalim
$ad = $_POST["ad"];

// oturum baslatalim
session_start();

// giris kontorl degiskeni tanimlayalim
$giris = true;

// ve degiskenleri kaydedelim
session_register('ad');
session_register('giris');

// giris tamamlandi, anasayfaya gonderelim
header("location:index.php");

?>
Şimdi ansayfamizi gelistirmemiz gerek. Giriş yapmış ziyaretçilere hitap eden kısımları küçük bir sargı ile çevreleyeceğiz.
<?

// oturumu baslatalim
sesion_start();

// giris bilgilerini alalim.
$giris = $_SESSION["giris"];
$ad    = $_SESSION["ad"];

// giris kontorlu yapalim
// giris yapilmis ise $giris true olmali
if( $giris ){
  // giris yapilmis hosgeldin..
  print 'Hoşgeldin ' . $ad . '<br>
  <a href="cikis.php">Çıkış</a>';
}else{
  // giris yapilmamis giris formu yazdiralim
  print '<form action="giris.php" method="post">
    <input type="text" name="ad">
    <input type="submit" value="Giris">
  </form>';
}

?>
İşte oldu, anasayfamız giriş kontorlu yaparak kullanıcı daha önce giriş yapmışsa tanıyor.

Çıkış dosyamız ise çok basit. oturumu öldürecek.
<?

// oturumu baslatalim
session_start();

// oturumu oldurelim
session_destroy();

// ansayfaya gidelim
header("location:index.php");

?>
Hepsi bu kadar :-)

Hazırlayan : Nazım Akmandil

Yorumlar

13 Ocak Pazar ´08 18:22
Düzenleyen & Güncelleyen : Mehmet Fatih Yıldız
13 Ocak Pazar ´08 18:56
Güzel döküman tebrikler.header komutu sayfa yönlendirmesimi yapıyor acaba.
13 Ocak Pazar ´08 23:04
evet header komutu adı üstünde header öznitelikleri tanımlar. location özelliği ise sayfayı yönlendirmeni sağlar...
Buradaki kullanımla sayfa yönlendirme işi yapabilirsin.
13 Ocak Pazar ´08 23:27
bu arada bu "Kod Parçası" kutusu çok hoş olmuş   :-)
Üye Resmi sercan elçin
18 Mart Salı ´08 08:38
önemli şeylere yer verdiğiniz için teşekkür ederim.başarılarınızın devamını dileri
29 Mart Cumartesi ´08 01:53
Bu yazı benim için çok iyi oldu =) hiç bir yerde doğru düzgün bir anlatım bulamamıştım, teşekkürler..
Üye Resmi NeTHaLiL
25 Ağustos Pazartesi ´08 13:35
Önemli bir hatırlatma Session'lar sayfanın en başında olmak zorunda yoksa çalışmazlar,belki merak eden olursa niye çalışmadı diye en başa alsın üzerinde hiçbirşey olmamalı...
26 Ağustos Salı ´08 21:06
Öyle bir zorunluluk yok, sadece session kullanacağın bölgelerden önce session_start(); fonksiyonunu çağırmak gerekli... Ben hep böyle kullandım, böyle kullanmaya da devam ediyorum, hiç bir sorun yaşamadım şu ana kadar.
23 Ekim Cuma ´09 03:48
session_register() fonksıyonu kaldırılıyor dıye duydum ben bu fonksıyonu pek kullanmıyorum sızce bı guvenlık sorunu varmı ?
19 Şubat Cuma ´10 17:12
session_register() kullanmadan aynı şeyleri yapmamız mümkün değil mi?
Üye Resmi Erman Gülhan
2 Mart Salı ´10 10:06
http://tr.php.net/manual/en/function.session-register.php

session_register() fonksiyonu PHP 5.3.0 versiyonu ile birlikte kullanılması oynaylanmıyor ve PHP 6.0 versiyonunda da bu fonksiyonun silineceği bildirilmiş.
2 Mart Salı ´10 11:02
Ben session_register fonksiyonunu hiç kullanmıyorum.
Oturum yazma işlemini:
$_SESSION[varname] = $value;
şeklinde yapıyorum, böyle kullanımını da öneririm.
Üye Resmi tufan kursat
19 Nisan Pazartesi ´10 19:19
ellerinize sağlık mükemmel atlatmışsınız.
23 Nisan Cuma ´10 20:59
bu mesajımı üyelik makalenize de yazdım. Burayı sonradan gödüğüm için tekrarrlıyorum...
Sitemdeki probleme yol gösterebilir misiniz?
Problem, site frarklı alt domainlerde çalışan scriptlerden oluşuyor,
herhangi bir alt domainde giriş yapan üye( örn. emlak.bursailan.com) oto alt domaininde tanınmıyor.
işlem session ile yapılıyor.
Teşekkür ederim
Üye Resmi Soner İŞBECER
20 Mayıs Perşembe ´10 17:55
Çok teşekkürler.. benim bi sitemde de   var dır hazır bulmuştum şimdi daha iyi anladım teşekkür ederim valla!!
Üye Resmi esat baba
28 Mayıs Cuma ´10 00:23
siktiri boktan cvermişsin kodları çalışmıyor ki .
Üye Resmi ahmet çakar
28 Temmuz Çarşamba ´10 11:58
hocam herşey iyi güzelde a.q bu kodlarda hata var hiç bi işe yaramadı sadece zaman kaybetmekten başka bu ne ya
Üye Resmi emre saygı
31 Ağustos Salı ´10 00:39
kardes anlatımın guzell fakat kodların hatalı !!!!!
31 Ağustos Salı ´10 14:13
hata nerede belirtebilir misin? düzeltmeye çalışabilirim.
Üye Resmi Gapz
16 Ekim Cumartesi ´10 00:05
Ayıp be, yukarda bazı densizler küfür etmişler, yok çalışmıyor, yok bozuk diye. Senin o bk beynin çalıştıramazsa niye adama kabahat buluyorsn.
Üye Resmi Ali Oğuzhan Yıldız
24 Şubat Perşembe ´11 23:54
merhaba.. hocam  güzel anlatım.. yeni başladım sayılır bende.. arkadaşlar kodlar çalışmıyo demişler..

sesion_start olarak yazılmış.. session_start olacak sanırsam 2 s ile.. o yüzden çalışmadığını söylüyo olabilirler

düzeltirseniz arkadaşlar hata yapmaz..

teşekkürler
25 Şubat Cuma ´11 14:22
Teşekkür Ederim Çok Ama Çok Yardımcı Oldu.
Üye Resmi nigregetem
3 Mart Perşembe ´11 13:24
sesion_start(); kısmı

session_start(); olacak 2 tane s ile

onun dışında bi problem yok.

Bu faydalı bilgi için arkadaşa çok teşekkür ederim
Üye Resmi meryem erdopan
13 Nisan Çarşamba ´11 21:41
mrblar bn int olan bi değere string bi değer atadmda hata verdrirp formun olduğu sayfaya geri, dön diyorum ancak forma geldiğinde girdiğim bilgilr siliniyo yani en baştan veri girmm gerekiyo bn bunu session_start() komutuyla engelleyebilirmiyim ??
Üye Resmi mustafa koca
2 Mayıs Pazartesi ´11 23:40
bu bilgiler çok işime yaradı çok sağolun. bi sorum olacaktı,  pencere kapandığında oturum kapatma nasıl olur. yardımcı olursanız sevinirim.
Üye Resmi sohbet
10 Mayıs Salı ´11 02:51
Peki session ile oturum açan arkadaşların yani ne zaman açmış hangi ip ile açmış bu bilgileri sql e kaydedip daha sonra görme imkanımız varmı acaba ?Teşekkürler.
Üye Resmi sadece bir dost :)
29 Haziran Çarşamba ´11 13:13
ve degiskenleri kaydedelim
session_register('ad');
session_register('giris');
 burada tek tırnak içinde değişkenler çalışacak mı ?  "ad" ve "giris" olmalı mı ?
Üye Resmi mehmet bir sorum var
6 Temmuz Çarşamba ´11 23:53
// giris kontorl degiskeni tanimlayalim
$giris = true;

buradaki true ne işe yaradı ?
Üye Resmi frmsoft com
8 Şubat Çarşamba ´12 02:48
ben bunu tam anlayamadım ya kafam cok karıstı
Üye Resmi Junyer
3 Nisan Salı ´12 22:27
Çok teşekkürler  tam aradığım kodlar
Üye Resmi Php_Caylak
19 Haziran Salı ´12 15:57
Arkadaşlar Php 5.3.0 'da

session_register();
session_unregister();
session_is_registered();

Desteklenmiyor Bunun Yerine  $_SESSION Süperglobalını Kullanın .

Sadece bir öneri ..  
Yeni Yorum *
İletişim Bilgileri
*
*
E-Posta adresiniz gösterilmeyecektir.
(unut)
Güvenlik Kodu *

Gönderiliyor