Tarayıcınızın Çerez Kadar Tatlı Bir Tarihi Var
Tarayıcınızın Tatlıya Düşkün Hafızasının Lezzetli Tarihi
Bir gün bir yazılımcı bakkal dükkânına girmiş. Raflarda kurabiyeler, bisküviler, wafle... Adamın gözleri parlamış. "Bu cookie'leri session'larda saklayabilir misiniz?" diye sormuş. Bakkal şaşırmış: "Hangi çerezler efendim?" İşte tam bu anda, tatlı ile teknoloji dünyası garip bir şekilde kesişmiş.
Bu tesadüf mü? Hiç sanmıyorum. Arkasında web'in hafıza edinme hikâyesi var.
Web Neden Unutkan Doğdu?
Şöyle düşün: bir siteye tıkladığında tarayıcın sunucuya bir istek gönderir. Sunucu bu isteği alır, işler, cevap verir ve... her şeyi unutur. Tamamen. O istekte ne yaptığın, ne seçtiğin, nereye gittiğin—hepsini siler atar.
Bir sonraki tıklamada aynı sunucu karşına çıkar ama senin için bu ikinci bir randevu gibi. "Kimsin sen?" der. "Seni tanımıyorum."
Bu kulağa aptalca geliyor, değil mi? Ama HTTP tam da böyle tasarlanmış. Stateless—yani devletsiz, vatansız, hafızasız. Her istek birbirinden bağımsız. Sunucuya göre sen her seferinde yeni birisin.
Eskiden bu sorun değildi. İnsanlar web sayfalarını okur, belgeleri indirir, linklere tıklar ve çıkardı. Ama modern web daha fazlasını istedi: alışveriş sepetleri, kişiselleştirilmiş panolar, girişli hesaplar. Ve işte o anda, web'in hafızasızlığı ciddi bir problem haline geldi.
State: Webin İhtiyaç Duyduğu Bellek
State demek, geçmişte yaptığın şeylerin gelecekteki sonuçları etkilemesi demek. Sepete bir klavye ekledin—state değişti. Artık sepetinde klavye var. Ödemeye geçtiğinde sunucu bu state'i okur ve klavyeyi toplama ekler.
State nerede saklanır? Heryerde olabilir: bellekte, veritabanında, tarayıcıda. Asıl mesele onu nerede tutacağın değil—ondan fazla isteği birbirine bağlayıp tutarlı bir deneyim yaratmak.
Session'lar: Kopuk İstekleri Birleştirmek
Bir session, birbirinden bağımsız HTTP isteklerini mantıksal olarak bir bütün haline getirir. Girişinden çıkışına kadar olan süreç bir session olabilir. Ya da giriş yapmadan, misafir olarak alışverişe başlayıp Sepete eklediğiniz ürünleri hatırlaması da bir session'dur.
Önemli nokta: HTTP session oluşturmaz. Bunu uygulamanın kendisi yapar. Ne zaman başlayacağını, içinde ne olacağını, ne zaman biteceğini sen belirlersin. Aynı kullanıcı beş farklı sekmede beş farklı session açmış olabilir—bu normal.
Kimliğin Kim?
İşler burada karmaşıklaşıyor. Bir sunucu aynı anda milyonlarca aktif session'ı yönetir. Yeni bir istek geldiğinde sunucu şunu sorar: "Bu kimin session'u?"
İşte bu noktada devreye session identifier girer—senin session'unu diğerlerinden ayıran benzersiz bir işaret. Anlamlı olmak zorunda değil, gerçek bir kimlikle bağlantılı olması gerekmez. Rastgele bir string olabilir: 7f41c0a9 veya ses_88293847. Önemli olan, sunucunun bu işareti kullanarak doğru session verisini çekebilmesidir.
Identifier'ın kendisi veri değil, bir anahtar. Sunucu der ki: "Bana 7f41c0a9 altındaki session verisini ver." Ve bir anda sepetindeki ürünler karşına çıkar.
Cookie: Taşıyıcı Mekanizma
Peki bu identifier her istekle birlikte nasıl seyahat eder?
Sunucu kendine güvenemez—her istek farklı bir sunucu örneğine gidebilir. Tarayıcının bu identifier'ı saklayıp her istekle birlikte otomatik olarak göndermesi gerekir.
Ve cookie'ler tam da bunu yapar. Sunucu tarayıcıya küçük bir veri parçası gönderir—genellikle basit bir isim-değer çifti. Tarayıcı bunu saklar ve sonraki her istekte tereddütsüz geri yollar. İşte webin hafızası böyle doğdu.
Peki Neden "Cookie"?
Etymoloji burada bulanıklaşıyor. Terim büyük ihtimalle magic cookie'den geliyor—Unix dünyasında programlar arasında geçen bir token veya değer. Netscape'teki bir geliştirici aç mıydı, Unix espirisini mi anlamadı, yoksa bilinçli mi komik oldu—tarih bunu cevapsız bırakmış.
Bildiğimiz şey şu: her junior geliştiricinin ilk "cookie" aramasında çikolatalı kurabiye tarifleri çıkıyor. Belki programcı mizahı, belki arama hacmini hafife aldıkları bir an.
Her neyse, bir site "çerezleri kabul et" dediğinde artık biliyorsun ki sadece gezinme takibini kabul etmiyorsun—stateless web'i hafızalı hale getiren zekice bir çözümün parçası oluyorsun.
NameOcean'da startup'lara ve geliştiricilere domain tescilinden hosting'e kadar web altyapısı kurmalarında yardımcı oluyoruz. Çünkü bazen cookie'leri anlamak yetmez—onları çalıştıracak altyapıya da ihtiyacın var.