"Session" v.s. "Cookie"

Bunlar nedir ne işe yarar?

PHP’de aslında dinamizmi getiren çoğu şeye karşılık kullanıcının hareketlerini izlerken veya kullanıcının hareketlerine karşı kodumuzun vermesini istediğimiz tepkileri belirlerken kullanıcı taraflı bilgi saklamaya ihtiyaç duyuyoruz. Sonuçta bütün olay sunucuda veya kullanıcıda bitmiyor. İkisinin iyi senkronu ile iyi koda dayanıyor.

Cookie de session da aynı yapıdadır. Basit olarak olay session’u cookie’ye benzeterek anlatmakla daha rahat anlaşılacaktır.
Cookie’ler kullanıcının bilgisayarında bir meta ve değer olarak tutulan, domainlere göre süzgeçlenen dosyalardır. Yani;
1. Dosya adı vardır ve bellidir.
2. İçeriği o dosyaya ait bilgiyi içerir.
(Normal veriden farklı yani)
3. bu dosyaların ve buna ait bilgilerin silineceği tarih bellidir. Son kullanma tarihi gibi.

Cookie dosyaları zamanı geldiğinde silinen değişkene benzer veri taşıma methodudur. Kullanıcı tarafında taşındığı için günevli olmayıp, kodlarda içeriği zararlı veriler taşınmamalıdır. Mesela bir üye sisteminde cookie içinde kullanıcının şifresi taşınmaz. Ancak oturum id’si kullanıcı id’si gibi bilgiler taşınmalıdır.

Session ise cookie’ler gibi çalışır, ancak bu bilgilerin silineceği zaman kullanıcının oturumu sonlandırdığı andır. Yani bu verilerin yönetimini zamanla sağlamayız. Oturum dedğimiz şey ise tarayıcı programa göre değişir. Bazı programlar bulunduğu pencereye ait oturumu taban alır. bu tarayıcılarda bir oturuma ait sitedeki pencerelerin hepsi kapanınca oturum kapanmış olur. Bazı tarayıcılarda ise tarayıcı program ve onunla ilişkili process kalamyana kadar ortak bir oturum çerçevesinde gider.

Peki bunları nerelerde kullanırız?

Cookie’ler belirli bir tarihe göre silinirler.. Uzun vadeli kullanıcı taraflı veri saklarken cookie’ler biçilmiş kaftandır. Ancak kısa vadeli (3-5 dakikalık veriler için, mesela oturum yönetimi için) pek güvenilir olamayabilir. Bunun için session (adı üstünde zaten “oturum”) kullanılır. Bir üye sistemi için cookie kullanılırsa, örneğin internet cafe’deki acil çıkışlarda masaya oturan diğer kişi bulduğu tarayıcı pencerelerini kurcalarken yanlış şeyler yapabilir..
Anket veya ziyaret kontrollerinde cookie’ler gayet güzel çalışabilirler.
Şu an dökümanlar bölümünde listelere dikkat ettiyseniz, listelerdeki dökümanların başındaki turuncu oklar renk değişimi gösterecektir. Okuduğunuz dökümanlar cookieler sayesinde orada daha flu bir renge dönüşecek ve okumadığınız, yeni dökümanları daha rahat seçebileceksiniz. Bu cookie sayesinde oluyor. Ama kullanıcı girişi çıkışı session + cookie karışımı ile.
Beni hatırla seçeneği ile bilgisayarınız bir kod yazılıyor. bu kod veritabanındaki hatırlama kodunuzla karşılaştırılıp eşlenmesi halinde otomatik giriş sağlanıyor. Tabiki bu kod yeterince güvenli. Çözebilen var ise artık girip istediğini yapsın. Zaten kodu kırmakla haketmiş 🙂

Bu alanda yapılan yanlışlar ve güvenlik sorunları!!

– Çoğu php’ye yeni başlayan cookie’leri önce öğrenip, ilk giriştikleri üye sisteminde cookie ile yazıyor. Burası yanlışın başlangıcı.
– Yine çoğu yeni başlayan php programcıları üye sistemlerinde cookie veya session değişkenlerinin içine tek kontrol ile kullanıcı adı veya kullanıcı adı + şifre saklıyor.. Yanlışın 1 numaralısıdır bu..
Exploitler ile bu açıklar kolaylıkla aşılabilir.

“Hangisi” değil “Nasıl”?

Ne kullandığınız değil, nasıl kullandığınız önemlidir. Belki üye sistemi session yerine cookie ile daha sağlıklıdır. Nerede kullandığınız da çok önemli bir unsurdur. Mesela bir banka sitesini yapıyorsanız Session kontrollü cookie tabanlı bir yapı çok daha sağlam olur. vs vs..

PHP’de Oturum (Session) Yönetimi

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ı:

Ş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.

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 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.

Ö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.

“isim” oturumunun kayıtlı olup olmadığına bakar.

session_unregister()

Kaydettiğiniz bir oturum değişkenini silmek için kullanılır.

Daha önce oluşturduğumuz isim adlı oturum bilgisini siler.

session_destroy()

Kayıtlı olan tüm oturum bilgilerini yok eder.

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.

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.

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

İş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.

Hepsi bu kadar 🙂

Hazırlayan : Nazım Akmandil