PHP, MySQL ve Açık Kaynak


« Php ile Oturum Yönetimi (SESSION)

Türkçesi oturum anlamına gelen session bilgilerin saklanması için kullanılan mantıksal bir nesnedir.Session oturum yönetimini kullanarak şifreli sayfalar oluşturarak ve bu sayfaları belirlediğiniz kullanıcıların görmesini sağlayabilirsiniz.

Ayrıca session kullanarak sitemize giren her ziyaretçiye atanan id ile kişiye özel bir alışveriş sepeti yapabiliriz.

Ziyaretçiye otomatik olarak bir id atandığında sepete eklediği her ürün sepette gözükür.Sepetteki ürünleri satın al dediğinde üyelik sayfasına yönlendirilir ve üye olduğunda sepette saklanan ürünlerin ödemesi yapılır.Genel mantık bu şekildedir.

Session oturum yönetimini kullandığımız sayfaların en başına:

session_start();

fonksiyonunu kullanmamız gereklidir.Neden gereklidir derseniz bu fonksiyon olmadan oturumu yönetemessiniz.

Örneğin bir üyelik sayfamız var ve üyelik sayfamıza giriş yapacağız.İlk önce ayar.php dosyamızı oluşturup içine kullanıcı adımızı ve şifremizi tanımlıyoruz.

<?php

$user = "admin";

$pass = "admin";

?>

Daha sonra index.php sayfamızı oluşturup giriş formumuzu yapıyoruz.

<form action="login.php" method="POST">

<table align="center">
<tr>
<td>Kullanıcı Adı</td>
<td>:</td>
<td><input type="text" name="user"></td>
</tr>

<tr>
<td>Şifre</td>
<td>:</td>
<td><input type="password" name="pass"></td>
</tr>

<tr>
<td></td>
<td></td>
<td><input type="submit" value="Giriş"></td>
</tr>

</table>

</form>

Burada kullanıcı adı ve şifremizi girmemiz gereken iki form kutucuğu oluşturduk.Ve giriş butonuna bastığımızda bizi login.php sayfasına yönlendirecek ve orada kullanıcı adımızın ve şifremizin doğru olup olmadığını kontrol edecek.Şimdi login.php sayfamızı oluşturuyoruz.

<?php

// ayar.php dosyamızı include ediyoruz ve session_start(); fonksiyonumuzu çalıştırıyoruz.

include("ayar.php");

session_start();
ob_start();

//formdan gelen bilgileri çekip ayar.php dosyamızdaki bilgilerle doğru olup olmadığını kontrol ediyoruz.

if(($_POST["user"]==$user) and ($_POST["pass"]==$pass)){

//eğer bilgiler doğruysa login ismi verdiğimiz session kaydını yapıyoruz.ve session kaydını kullanıcı adıyla şifremize eşitliyoruz.

$_SESSION["login"] = "true";
$_SESSION["user"] = $user;
$_SESSION["pass"] = $pass;

header("Location:admin.php");

}else{

//diğer durumda hata mesajı verip giriş sayfamıza yönlendiriyoruz.

echo "Kullanıcı adı veya Şifre Yanlış.";

header("Refresh: 2; url=index.php");

}

ob_end_flush();

?>

Not: ob_start() fonksiyonu kafanızı karıştırmasın o fonksiyonu header() fonksiyonunu çalıştırmak için kullandık.

Şimdi admin.php sayfamızı oluşturuyoruz.

<?php

include("ayar.php");
session_start();

//eğer login session kaydı yapılmadan yani giriş yapmadan admin.php sayfamıza erişmek isterlerse buna engel oluyoruz.

if(!isset($_SESSION["login"])){

echo "Bu sayfayı görüntüleme yetkiniz yoktur.";

}else{

echo "Admin sayfası<br>";
echo "<a href="logout.php">Çıkış Yap</a>";

}

?>

Şimdi logout.php sayfasıyla session kaydını silip siteden çıkış yapacağız.Bunun için session_destroy(); fonksiyonunu kullanacağız.

<?php

session_start();

ob_start();

session_destroy();

echo "Çıkış Yaptınız.Ana Sayfaya Yönlendiriliyorsunuz";

header("Refresh: 2; url=index.php");

?>

Yaptığımız örnek ile umarım session kullanımını anlamışsınızdır.

Uygulama dosyasını http://www.guraysuerdem.com/dosya/session.rar adresinden indirebilirsiniz.


Etiketler : , ,



43 Yorum


  • 19.Ocak.2008
    tfn yazdı

    Elinize kolunuza sağlık. Paylaşımlar için teşekkürü bir borç bildim.

  • 19.Ocak.2008
    Güray Süerdem yazdı

    Ben teşekkür ederim.

  • 30.Mart.2008
    serkan yazdı

    teşekkürler.

  • 01.Nisan.2008
    Enes yazdı

    Selam Gerçekten Çok güzel.Temel bir uygulama.Ben kendim bir sistem geliştirmek istiyorum.Bununla ilgili bu kodları kullanarak bir anlatım yapmanız mümkün mü?

  • 29.Nisan.2008
    huseyin yazdı

    bende paylasılan bilgiler icin tesekkuru borc bilenlerdenim

  • 28.Temmuz.2008
    Mert yazdı

    Vallahi Hocam Cok Güzel Olms Ellerine Saglık

  • 11.Eylül.2008
    Safa GÜRSOY yazdı

    Galiba tam olarak anlamadım. Ama az kaldı diyebilirim. 3. okuyuşumda kesinlikle mantığı kapacağım. :)

    Çok Teşekkürler.

  • 23.Aralık.2008
    Developer yazdı

    Süper Sağol

  • 02.Şubat.2009
    mikail yazdı

    olay bu be.hocam harika

  • 24.Mart.2009
    Ömür yazdı

    Ellerinize sağlık aradığım kod bu idi. Bunu geliştirip siteme uyarlıyacam.

    Çok Teşekkürler…

  • 30.Mart.2009
    Burak yazdı

    Çok Güzel Bir Anlatım ve Çalışıyor. Hiç Hata yok. Çok Teşekkür ederim. Çok faydalı oldu…

  • 11.Nisan.2009
    CoolMaster yazdı

    Merhaba Güray Herşeyi Güzel Anlatmıssın Öncelikle Tşk ederim Ufak Bir Şey Soracağım Örnegin Ben Misafir Girişli Bir Chat Sayfası Hazırlıyorum. Ziyaretcilerin Session Ayarlarını Yaptım Yanlız Ben Oturumun Sadece Bir Defa Açılmasını İstiyorum Örnegin username: (mehmet ali) giriş yaptı ve oturuma yüklendi (mehmet ali) halen oturumdayken başka bir bilgisayardan (mehmet ali) nickiyle girişi engellemek istiyorum. yani her nickle bir defa girilsin alper girdi tekrar başka bilgisayardan alper girişini engellemek yani istiyorum. bu konuda biraz aydınlatırmısınız. bir çok forumda örneklere baktım ama istedigim kodu bulamadım. Tekrar Tşkler.

  • 12.Nisan.2009
    Güray Süerdem yazdı

    Dediğin işlemi şu şekilde yapabilirsin.
    Veritabanında örneğin uye tablosuna durum alanı eklersin default 0 olarak yaparsın.Kullanıcı giriş kontrol sayfasında durum alanına sorgu gönderip eğer 0 ise giriş yap ve durumu 1′e eşitle sessionu kaydet ve panel sayfasına yönlendir.Bu şekilde durum=1 olarak oturum açılır.Çıkış yaparkende durumu 0′a tekrar eşitlersin.
    Oturum açıkken giriştede aynı şekilde durum 1 ise zaten giriş yaptınız gibi bir uyarı ver.

  • 21.Nisan.2009
    serkan yazdı

    ya tek kelimeyle süpersiniz… Daha yeni anladım session u:)

  • 30.Nisan.2009
    Bayram Özinal yazdı

    çok güzel anlatmışsınız hocam elinize sağlık.

  • 01.Mayıs.2009
    vadaaaa yazdı

    ellerine sağlık kardeşim.

  • 04.Haziran.2009
    kaan yazdı

    tek kelime ile mükemmel bir anlatımdı..

  • 24.Temmuz.2009
    saim yazdı

    sesion u anladım çok teşekür ederim ama konuyla alaksı olmasada Header(”"); ve ob_start(); ne işe yarıyor anlamadım.

  • 02.Eylül.2009
    Mehmet yazdı

    Gerçekten de anlaşılır ve öğretici bir anlatım.
    Çok teşekkürler..

  • 07.Eylül.2009
    sinan yazdı

    Güray arkadaş çok babacan birşekilde anlatmış.helal olsun.Eminim bundan epey kişi yararlanmıştır.
    eyvallah

  • 13.Eylül.2009
    fatih yazdı

    Bu siteyi yeni keşfettim. Konuları hep en yalın ve anlaşılır bir şekilde ele almışsınız. Paylaşımınız için sizlere çok teşekkür ediyorum.

  • 22.Mart.2010
    memet aslan yazdı

    arkadaslar proje hazırlıyorum.uye giris formunu hazırladım uye giris yaparak sayfasına gidiyor ama profil sayfasında kullanıcıya ait bilgileri nasıl gosterebilirm(giris yapan uye ye ait bilgileri)
    lutfen yardımcı olun cok acil.projem

  • 25.Mart.2010
    ibrahim yazdı

    sesion kapatma olayı cok işime yaradı emegi gecenlere cok tsk ederim

  • 26.Nisan.2010
    samet kayalı yazdı

    elinize saglık kardes ii çalısma olmus çalısmalarının devamını dilerim

  • 21.Mayıs.2010
    Skater Sercan yazdı

    Gayet başarılı bir anlatım, emeğinize çok teşekkürler…

  • 07.Temmuz.2010
    Tarık Turan yazdı

    Merhabalar… Öncelikle anlatımınız ortalama php bilgisi olanlar için gayet net ve anlaşılır ve de faydalı bir anlatım olmuş. Bunun için teşekkür ederim. Ayrıca bu oturum konusunda, sitemde yaptığım oturum yönetimlerinin olduğu sayfalar daha önce çok güzel çalışırken bildiğiniz gibi php5.x sonrası kodlarda nesne yönelimli programlamaya dönük değişiklikler oldu ve depracate hataları aldım bol bol :) dolayısıyla sayfalarda değişiklik yaparken oturumlarda session_is_registered() ve benzeri fonksiyonların kalkmasıyla arayışa girdim ve yerine sizin verdiğiniz kodları da biraz düzenleyerek ekledim ve sorunlarımı çözdüm. Bunun için ayrıca teşekkürler. Fakat webi altüst etsem de birçok kişinin bu yeni değişikliklerle ilgili bir makalesini göremedim. Sadece şunun yerine şunu kullanın gibisinden kısa ve pek açıklayıcı olmayan makaleler yer almaktadır. Anlatımınızın açık ve anlaşılır olmasından ötürü sizden ricam php5.x ki özellikle 5.3.0 sonrası yapılan değişikliklerle ilgili örnekler yayınlamanız. Örneğin ; eregi() yerine preg_match() ya da benzeri preg_… fonksiyonların kullanımı geçerli artık …Ama bunlarla ilgili türkçe açık güzel bir anlatım söz konusu değil. umarım vakit bulup faydalı çalışmalarınızla bizleri bilgilendirebilirsiniz… Teşekkürler,kolay gelsin,iyi çalışmalar…

  • 08.Temmuz.2010
    Burak yazdı

    Warning: Unknown: open(/tmp\sess_deb7096ac0c194a862ece2eb64a6b6e5, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

    Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

    index.php sayfasında session lar ile ilgli böyle bir hata verdi……………NEDENİ nedir nasıl düzelteiblirim lütfen yardımcı olurmusunuz…..

  • 08.Temmuz.2010
    Skeleton1 yazdı

    Warning: Unknown: open(/tmp\sess_deb7096ac0c194a862ece2eb64a6b6e5, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

    Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

    index.php sayfasında session lar ile ilgli böyle bir hata verdi……………NEDENİ nedir nasıl düzelteiblirim lütfen yardımcı olurmusunuz…..

  • 14.Temmuz.2010
    Ferhat yazdı

    Teşekkürler kaliteli anlatımınız için.

  • 24.Temmuz.2010
    onur yazdı

    şimdiye kadar session ile ilgili bulduğum en güzel kaynak :) teşekkürler

  • 09.Ağustos.2010
    kaan web deneme yazdı

    Session oturumu o sitenin url adresinden nasıl açabiliriz.

  • 23.Ağustos.2010
    er ter yazdı

    emeğine sağlık gardaş çok güzel olmus, yanlız $user ve $pass ı veritabanından çekseydin tam olurdu.

  • 01.Eylül.2010
    Kaan yazdı

    gayet basit ve güzel biçimde açıklamışsınız.elinize sağlık

  • 14.Kasım.2010
    suleyman yazdı

    çok teşekkurler emeğiniz için

  • 26.Aralık.2010
    ayse yazdı

    harika anlatmışsınız elinize sağlık işime de yaradı hiç hata vermeden çalıştı süpersiniz :)

  • 22.Ocak.2011
    Ahmet Ozan yazdı

    echo “Çıkış Yap“; dediğimde hata veriyor

  • 26.Ocak.2011
    Güray Süerdem yazdı

    Hatayı buraya yazabilirseniz ona göre yardımcı olmaya çalışacağım.

  • 24.Mart.2011
    Uğur yazdı

    Makaleniz büyük fayda sağladı. Teşekkürler

  • 26.Mart.2011
    Serhat yazdı

    Çok güzel hazırlamışsınız anlatımlarınızı harfiyen uyguladım. Hiçbir farklılık yok ancak login.php sayfasında if satırında hata alıyorum. kulanıcı adı ve şifreyi doğru giriyorum ama o satırda hata veriyor.
    ( ! ) Notice: Undefined index: pass in C:\wamp\www\dersler\login.php on line 8

    if blogum şu şekil bir hata bulamadım ben ama birde siz bakın :S
    if(($_POST["user"]==$user)and($_POST["pass"]==$pass))

  • 08.Mayıs.2011
    Reyhan YILMAZ yazdı

    Öz bilgi içiren bu değerli makale için çok teşekkür ederim.
    Gayet net anlatmışsınız.

    Saygılar,
    Reyhan YILMAZ.

  • 22.Ağustos.2011
    Mad Gemini yazdı

    Ellerine sağlık hocam. Bu güzel bilgiler ve sade anlatım için teşekkürler :) Saygılar.

  • 23.Ağustos.2011
    ali yazdı

    session_start(); hatası alıyorum sürekli
    nasıl düzeltebilirim.Şimdiden tskrlr

  • 22.Ocak.2012
    web tasarım yazdı

    Teşekkürler paylaşım için.

Yorumla