Php ile Session Oturum Yönetimi
Php 30 Ekim 2009Php4 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.
Etiketler: kullanımı, oturum, php, php üyelik sistemi, session, yönetim


30 Mart 2010 22:15
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
6 Temmuz 2010 13:39
yonetim.php de hep echo echo mu kullanıcaz rahatça html kodlarını nasıl kullanabiliriz ? sonuçta admin paneli yapıyoruz dimi (:
10 Mayıs 2011 21:46
Çok Güzel Anlatmışsınız Hocam Ellerinize Sağlık :)
25 Ağustos 2011 17:05
Teşekkür ederim :)
27 Ağustos 2011 15:19
her tarafta okudum bi tek burada anladim cok saol
2 Kasım 2011 21:23
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.
5 Kasım 2011 22:09
@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.
22 Mayıs 2012 21:31
Ç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.
29 Haziran 2012 10:36
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…
25 Ağustos 2012 22:04
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;
9 Eylül 2012 22:41
@Rıza Han
Php ve MySQL tabanlı üyelik sistemi ile ilgili aşağıdaki makalemi inceleyebilirsiniz.
http://www.celalyurtcu.com/php-ve-mysql-tabanli-uyelik-sistemi.html
24 Ekim 2012 00:58
Merhaba. Ben bu kodları bazı sayfaların başına koyduğum halde şifre istemiyor acaba neden. Saygılar.
2 Aralık 2012 16:27
Merhaba Celal abi sana bunu söylemek istiyorum.
Adamın dibisin.
25 Ocak 2013 11:20
Çok işime yaradı çok teşekkürler emeğine sağlık.
1 Mart 2013 14:08
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
18 Haziran 2013 10:13
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
18 Eylül 2013 20:35
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
15 Mart 2014 09:59
eline sağlık çok güzel açıklamışsın
14 Temmuz 2015 20:02
Yararlı bir yazı olmuş, teşekkürler.
3 Eylül 2015 13:37
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
5 Ocak 2016 23:35
veritabanı bağlantılı bir session oturum paneli hazırlarsanız.çok daha yararlı olur diye umuyorum
12 Kasım 2017 20:00
kardes helal gerekten guzel anlatım emegine saglık
7 Şubat 2018 01:48
Unxpected if hatası aliyorum nasıl cozerim