Php ile Session Oturum Yönetimi

Php4 versiyonu ile birlikte kullanılmaya başlanan Session yani Oturum, ziyaretçi bilgilerini diğer sayfalar arasında kullanabilmemizi, özelleştirilmiş sayfalar oluşturmamızı ve şifreli sayfalar gibi daha birçok konuda bize yardımcı olan çok faydalı bir özelliktir.

Siteye giren her ziyaretçi için öncelikle o ziyaretçiye özel Session ID ile oturum açılır.
Bu ID tarayıcı penceresi kapatılana kadar o site için değişmez. Ziyaretçi pencereyi kapatırsa sunucudaki Session ID değeri silinir ve tekrar siteye girdiğinde yeni bir Session ID atanır. Ziyaretçinin tüm etkinlikleri, sunucu tarafında kaydedilir. Örneğin alışveriş sitelerinde gördüğünüz sepet işlemleri ve bazı özelleştirmeler Session ID ile yönetilir.

Kullanımı:

<?php

session_start()

?>

session_start() fonksiyonu oturum bilgilerine erişilmek istenen sayfaların başında mutlaka olması gereken bir komuttur. Session aslında kullanımı gayet kolay bir özelliktir, hemen basit bir uygulama ile ne kadar kolay olduğunu görelim.

Örnek Üyelik Sistemi

Giriş bilgilerini içinde tutacağımız ayarlar.php dosyamızı oluşturuyoruz.

<?php
$kullanici = "admin";
$parola = "1234";
?>

Şimdi de ziyaretçinin giriş yapacağı index.php dosyamızı oluşturalım. Ziyaretçi bu sayfadan giriş yapacak.

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

Kullanıcı Adı:
<input type="text" name="kullanici"><br />
Parola:
<input type="password" name="parola"><br />

<input type="submit" value="Giriş Yap">

</form>

Şimdi de giriş bilgilerinin denetleneceği ve sonucuna göre işlem yapacağımız denetim.php dosyasını oluşturuyoruz.

<?php
include("ayarlar.php");
session_start();

if(($_POST["kullanici"]==$kullanici) and ($_POST["parola"]==$parola))
{

$_SESSION["giris"] = "true";
$_SESSION["kullanici"] = $kullanici;
$_SESSION["parola"] = $parola;

header("Location:yonetim.php");

}
else
{

echo "Kullanıcı adı veya Şifre Yanlış.<br>";
echo "<a href=index.php>Geri dön</a>";

}

?>

denetim.php dosyasında $_SESSION özelliğini kullanarak 3 yeni session tanımladık. Bunlardan giris isimli olan true değerini taşır ve diğer sayfalarda bu değişken yardımıyla giriş yapılıp yapılmadığını kontrol ederiz. kullanici ve parola session’ları da giriş yapan ziyaretçinin kullanıcı adı ve şifre bilgisini tutacak, gerektiğinde yine bu bilgiler kullanılabilecek.

Şimdi yonetim.php isimli yönetim sayfasını oluşturalım

<?php
include("ayarlar.php");
session_start();

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

echo "Bu sayfayı görüntüleme yetkiniz yoktur.<br>";
echo "<a href=index.php>Giriş sayfası</a>";

}
else

{
echo "Admin Paneli<br>";
echo "<a href=\"cikis.php\">Çıkış Yap</a>";
}

?>

yonetim.php dosyasında kullandığımız isset() fonksiyonu, içerisine gönderilen değişkenlerin var olup olmadığını kontrol eder. Yani bir değişken daha önceden tanımlanmışsa TRUE tanımlanmamışsa FALSE değerini döndürür. Biz giriş yapan ziyaretçi için giris isimli bir session tanımlamıştık, bu sayfada onun var olup olmadığını kontrol ettik.

Şimdi giriş yapan kullanıcının çıkış yapması için cikis.php dosyasını oluşturalım

<?php
session_start();
session_destroy();

echo "Çıkış işlemi tamamlandı.";
echo "<br><a href=index.php>Anasayfa</a>";
?>

cikis.php dosyasında kullandığımız session_destroy() komutu açılmış olan oturumun tüm bilgilerini silmek için kullanılır. Bu uygulamayı localhost’ta çalıştırıp inceleyin. session kullanımının ne kadar basit olduğunu göreceksiniz.

Makalenin çalışma dosyalarına http://www.celalyurtcu.com/dosyalar/session.zip adresinden ulaşabilirsiniz.

 21.962 defa okundu

23 Yorum

  1. merhaba hocam.ben mezuniyet projem icn web sayfası hazırlıyorum.php/mysql kullanıyorum.uyeler icin farklı farklı taplolarım var ama hepsi birbiryle iliskili.ornegin ilk once kisi siteye uye olacak profil bilgileri ilgili tabloya katdedilecek ondan sonra ozgecmis hazırlayacak kendisine ve formdaki bilgiler gerekli taplolara kaydedilecek uzun zamandır pesindeyim bu konunun ama basaramadım.bir suru forma yazdım hic birinden acıklayıcı bilgi alamadım umarım siz yardımıcı olursunuz mezuniyet projem oldugu icin mutlaka yapmam gerekiyor lutfen yardımlarınızı esirgemeyin.iyi calısmalar

  2. yonetim.php de hep echo echo mu kullanıcaz rahatça html kodlarını nasıl kullanabiliriz ? sonuçta admin paneli yapıyoruz dimi (:

  3. Anlamadığım bi nokta var.
    yonetim.php sayfasında;

    if(!isset($_SESSION[“giris”])){

    echo “Bu sayfayı görüntüleme yetkiniz yoktur.”;
    echo “Giriş sayfası”;
    }
    else {echo “Admin Paneli”;echo
    “Çıkış Yap”;
    }
    ————————
    if ile başlayan kısım şu anlama gelmiyor mu?:

    Eğer $_SESSION ile gelen “giris” true ise (echo başlıyor)admin paneline gir,

    true değilse (echo başlıyor)sayfayı görme yetkiniz yoktur.

    anlamaya çalışıyorum ama bu şekilde yorumladım. Fakat önce yetki yoktur sonra admine paneline giriş diye yazılmış. isset tersine mi çalışıyor? Ya da ben neyi kaçırıyorum.

  4. @Mustafa
    Dikkatinden kaçan nokta isset fonksiyonunun en başındaki ünlem ! işareti. Yani giris isimli session tanımlı değilse bu sayfayı görüntüleme yetkiniz yoktur mesajı görüntüleniyor. Php’de operatörlerin kullanımı ile ilgili şuradaki makalemi incelemeni öneriyorum.

  5. Çok güzel anlatım olmuş teşekkürler. Ben daha yeni olduğum için pek bi bilgim yok. Burdaki session komutlarını anladım da, hem session komutları hem de veritabanına kayıt işlemini anlayamadım. O da diğer sayfada anlatılmış ama sadece linki var. Gerçi kodların yanlarında açıklamaları var ama burdaki gibi açıklayıcı olmuyor. Burdaki gibi açıklansaydı çok iyi olurdu.

  6. Hocam selamlar. O kadar araştırdım okudum ama burda anladım çok güzel anlatmışınız ALLAH sizden razı olsun. Kolay gelsin iyi günler…

  7. Bu sade ve anlaşılır makale için teşekkürler Celal bey. Sormak istediğim bir soru var. ayarlar.php dosyasında kullanıcı adı ve şifreyi belirliyoruz. Bunun yerine Myqsl’de admin isimli tabloda yer alan bütün kullanıcılara kendi kullanıcı adı ve şifreleriyle giriş imkanı nasıl sağlayabiliriz? Ben aşağıdaki şekilde deniyorum fakat yalnızca ilk satırdaki kullanıcı adı ve şifre kabul ediliyor. Diğer satırlardaki kullanıcılarda k.a. ya da şifre hatalı uyarısı veriyor.

    include “db_baglan.php”;

    $yoneticiler = mysql_query(“select * from admin”);
    $liste=mysql_fetch_array($yoneticiler);

    $kulladi= $liste[“kulladi”];
    $sifre= $liste[“sifre”];

    $kullanici = $kulladi;
    $parola = $sifre;

  8. Merhaba. Ben bu kodları bazı sayfaların başına koyduğum halde şifre istemiyor acaba neden. Saygılar.

  9. merhabalar kardeşim öncelikle faydalı bilgilerin için teşekkür ediyorum. halen senin hazırlamış olduğun üyelik scriptini kullanıyorum sitemde. site kendi kodlamam yani hazır şablon değil ancak sitede yapmak istediğim bişey var. özetle anlatacak olursam üyelik sistemiyle giriş yaptık yada ziyaretci olarak girdik index.php ye geldik eğer üyeysek sayfayı görebiliyoruz değilsek üye ol sayfasına yönlendiriliyoruz. ben şunu yapmak istiyorum yine index php içinde bi blok içerisinde üyeysek hoşgeldin kullanıcı görünsün değilsek orda üye girişi login kısmı görünsün aynı blok içinde if(!isset($_SESSION[“giris”]))
    {echo”üye değil”;}
    else {echo”üye”;} benzeri bişey yapmak istiyorum ama bi türlü beceremedim yardımcı olursan sevinirim

  10. Hocam teşekkürler localde çok güzel sorun yok ama bu işlem hotta çalışmıyor ?
    Hata;

    Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /home/***/public_html/haziran/denetim.php:1) in /home/***/public_html/haziran/denetim.php on line 3

    Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home/***/public_html/haziran/denetim.php:1) in /home/***/public_html/haziran/denetim.php on line 3

    Warning: Cannot modify header information – headers already sent by (output started at /home/***/public_html/***/denetim.php:1) in /home/***/public_html/haziran/denetim.php on line 12

  11. Merhaba hocam,

    Herşey güzel fakat “if(!isset($_SESSION[“giris”]))” kısmında giris sessionu başlatıldıysa yönetim paneline girmemize izin veriyor.
    peki ben session.php yapıp

    şeklinde bir php dosyası olusturup localhostta çalıştırdığımda “giris” sessionu nu başlatmış olcam ve yonetim.php yi direk tıkladığımda denetim.php deki kadı şifre kontrolune girmeden yonetim.php ye ulaşmış olacağım. Bu açığı nasıl kapatabiliriz ?
    Kolay gelsin
    iyi çalışmalar

  12. merhaba arkadaşlar yeni yönetim paneli ile sizi tanıştırmak ıstıyorum ben tanıstım ve memnun kaldım sıra sızde googleye weeb admın yazarak tanısın ve web sıtenızı yapmaya baslayın tek tuşla içerik ekleyıp sılebılme ozellıgı sayesınde cok tutuldu ve sız hala panel arayın belkı rastgelır tabı kullanıcı sayısı zırve yapmazsa

  13. veritabanı bağlantılı bir session oturum paneli hazırlarsanız.çok daha yararlı olur diye umuyorum

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir