Session Nedir? Cookie Nedir?
- İbrahim Mert COŞKUN
- Jul 14, 2018
- 3 min read
Selamlar. Bu yazımda başlıktan da anlaşılabileceği üzere Session ve Cookie hakkında konuşacağız. Son 1 aydır PHP ile haşır neşirim. Konu session ve cookie kısmına geldiği zaman güzel bir yazı olacağını düşündüm ve yazmaya karar verdim. Belki sonraki yazılarımda işin güvenlik kısmına da değinirim (değinemedi)
Öncelikle şunu bir kesinleştirelim. Session aslında bir tür "Cookie" türüdür. Bir çok kişi bunu karıştırıyor. Yani session ve cookie farkları nedir diye bir karşılaştırma yapılamaz. Çünkü session zaten bir "Cookie(çerez)" türüdür. Zaten SessionID HTTP Header kısmında Set-Cookie ve Cookie üstbilgisi ile gönderilir ve alınır. Bundan dolayı da karşılaştırmayı "Session - Cookie" arasında değil de "Cookie türleri" arasında yapılmalıdır. Daha rahat anlaşılabilmesi için aşağıdaki görsel yardımcı olacaktır.

Resimde de görüldüğü üzere Cookies altında dallar ve bu dallardan biri de "Session Cookies" olarak sınıflandırılmıştır. Burada bizim bilmemiz gereken asıl olay geçici çerezlerin aslında "Session Cookies" ve bizim bildiğimiz kalıcı çerezlerin de "Persistent Cookies (Kalıcı Çerez)" olduğunu bilmemiz gerekiyor.
Session ve Cookies ile ilgili bildiğimiz ya da yanlış okuduğumuz bilgileri düzelttiğimizi düşünüyorum. Şimdi konumuza geri dönelim.
Cookie'lerin genel amacı siteye ziyaret esnasında server tarafından tarayıcınıza gönderilen verilerdir. Hem kalıcı hem de geçici olmak üzere birden fazla türü vardır. PHP ile uğraşırken Session ve Cookie'leri öğrendiğim zaman çoğu sitede gördüğümüz "beni hatırla, şifremi hatırla vs" gibi durumların nasıl oluştuğunu ve nasıl kullanıldığını çok daha rahat bir şekilde öğrenmiş oldum (Tayfun Erbilen hocama selamlar)
Cookie'ler (çerezler) bir web sayfasını ziyaret ettiğiniz zaman server tarafından gönderilen ve tarayıcıya kaydedilen 4KB'lık dosyalardır. Tam açıklamadan önce Cookie'lerin nasıl çalıştığı hakkında ufak bir bilgi verelim.
Cookie'ler "HTTP Header" alanlarında gönderilir. HTTP Header iki türden oluşur. HTTP Request ve HTTP Response. Çalışma mantığı; siz bir siteye girdiğiniz zaman, kullanıcı, server'dan siteyi getirmesi için bir istek atar (HTTP Request). Server da buna karşılık olarak kullanıcının isteğini kabul eder ve siteyi gönderir (HTTP Response). Bu sırada server tarayıcınıza bir metin dosyası bırakır. İşte bu Cookie'ler sizi daha sonra aynı siteye yapacağınız bir ziyarette hatırlanmanızı ve girdiğiniz kullanıcı adı, şifre gibi bilgileri hatırlayarak bir daha sormayacağı anlamına gelir. En basit örnek olarak bir e-ticaret sitesi düşünelim. Kayıt oldunuz, giriş yaptınız, ürünü aldınız ve siteyi terk ettiniz. Eğer siz belli bir süre sonra yine siteye gittiğiniz zaman kullanıcı adınızın yazıldığını göreceksiniz. Eğer şifrenizi hatırlamasını istediyseniz zaten direk giriş yapacaktır. İşte Cookie'lerin amacı sizi tanıyarak tekrardan siz siteye ziyaret ettiğiniz zaman sizi tanımasıdır.

Şimdi Cookie ile Session arasındaki farkı anladık ve türlerinden bahsettik. Şimdi gelelim kalıcı Cookie'ler olan Persistent Cookieye
Persistent Cookie (kalıcı çerez); kullanıcı web siteleri gezerken tarayıcımıza bıraktığı küçük text dosyalarıdır. Yukarıda da bahsettiğim gibi 4KB'lık olan bu dosyalar geçerlilik tarihi sona erene kadar veya siz tarayıcınızdan kullanıcı çerezleri silinene kadar kayıtlı durur. Tabii burada geçerlilik tarihini web sitesi belirler. Kalıcı çerezler ile websitelerinin, bizim, site üzerindeki hareketlerimizi takip etmesi ve bazı bilgilerimizi kaydetmesi mümkündür. Örnek olarak bir siteye girdiğimiz zaman "beni hatırla" işareti bunun en bilindik özelliklerinden biridir. PHP dilinde klasik Cookie tanımlama;

şeklindedir.
Persistent Cookie Nasıl Çalışır?
Yukarıda ki görselde belirttiğimiz gibi Cookie'ler HTTP Header kısmında gönderilir. Kullanıcı bir siteye girerken server'a siteyi getirmesi için istekte bulunur. Bu işleme "HTTP Request" denir. İsteğimiz server'a ulaştıktan sonra eğer web sitesi tarayıcıya bir "Cookie" bırakmak istiyorsa HTTP Response mesajı ile bize bunu yanıtlıyor. Çerezler HTTP Response ile Set-Cookie alanında tanımlanıyor. Bu anda bilgisayarımıza kalıcı bir Cookie dosyası bırakılmış oluyor. Siz daha sonra aynı siteye tekrardan bir ziyaret yaptığınız da HTTP Request ile bu veriler yeniden server'a yönlendirilir. Bu sayede tekrardan üye girişi yapmak yerine Cookie'ler sayesinde direk siteye giriş yapabilirsiniz.
Şimdi Gelelim Yanlış Bilinene: Session Cookie
Yukarıda tekrar bahsettiğim gibi bir çok kişi Session ile Cookie'nin ayrı şeyler olduğunu düşünüyor. Ancak bu yanlış bir kanı. Session Cookie (geçici çerez), Persistent Cookie'lere nazaran tarayıcımızda kalıcı bir süre kalmaz. Biz sitede olduğumuz sürece Session Cookie de kalır. Ta ki tarayıcı kapatılana kadar. Peki Session Cookie nasıl çalışır?

Kullanıcı siteye girdiğinde server kullanıcıya bir "SESSİONID" tanımlar. Bu ID'ler server'da genellikle veritabanlarında kaydedilir. Dediğimiz gibi Session Cookie'ler geçici çerezlerdir ve siz tarayıcıyı kapattığınız andan itibaren silinir. Bunun en güzel örneği yine e-ticaret siteleri. Siz bir ürünü sepetinize eklediğiniz zaman siteyi "kapatmadığınız" sürece ürününüz sepetinizde durur. Siz de sekmeler veya sayfalar arasında dolaşırsınız. Bunun sebebi server sizin için bir "SessionID" oluşturmuştur ve bunu "veri tabanına" kaydeder. Ta ki siz tarayıcıyı kapatana kadar.
Bizler yine bir siteye ziyaret edeceğimiz zaman bir istek göndeririz. İstek ulaştıktan sonra server'ın veri tabanında bir "SessionID" tanımlanır. Bundan sonra siz siteyi ne zaman ziyaret edecek olursanız client-server iletişimi hep aynı ID ile gerçekleşir. Son olarak server Cookie alanındaki verileri okuyor, session ID'yi kontrol edip buna göre verileri güncelliyor ve HTTP response mesajı ile siteyi bize getiriyor. Eğer tarayıcı kapanmadıysa işlem böyle devam ediyor.
Son olarak genel bir özet geçecek olursak;

(Resim hakantasan.com adresinden alınmıştır.)
Ufak bir dipçik: İleriki konularımda gerek Cookie türlerinden gerek ise de Cookie üzerinden yapılan saldırılara göz atmayı planlıyorum. Bu Cookie burada bitmeyecek :)
Comments