Web, bir web tarayıcısından web sitesine yapılan her isteğin ayrı olacak şekilde tasarlanmıştır. Web'in tasarım gereği "hafızası" yoktur. Bir web sayfasını her açtığınızda ziyaret ettiğiniz web sitesi, son oturumunuzun bilgilerini hatırlayamaz. İstekleri ve yanıtları izlemek için bir mekanizmaya gerek olmadığından bu, web'in verimli ve basit olmasını sağlar.
Ancak web'in unutkan yapısı da bir sorun teşkil eder. Örneğin, bulunduğunuz web sitesi az önce eklediğiniz öğeleri hatırlayamıyorsa alışveriş sepeti nasıl çalışabilir?
Çerezler bu sorunu çözmek için icat edildi.
Çerezler, web sitelerine hafıza sağlar
Bir web sitesindeki bir sayfayı ziyaret ettiğinizde web tarayıcınız, sayfaya dahil edilen kaynaklar (ör. HTML, CSS, JavaScript veya resimler) için web sitesinin sunucusuna istek gönderir.
Web tarayıcıları ve web siteleri, HTTP protokolünü izleyerek etkileşim kurar. Bu, iletişim için standartlaştırılmış bir kurallar kümesidir.
Web sitesi sunucusu, bir kaynağa yönelik HTTP isteğine yanıt olarak kaynağın yanı sıra başlıklar adı verilen ek bilgiler de ekleyebilir. HTTP yanıtına dahil edilen bir Set-Cookie
başlığı, tarayıcınızda bir metin (ad ve değer) depolanmasını sağlar. Buna çerez denir. Örneğin, Set-Cookie: cat=tabby
yanıt üstbilgisi tarayıcınızda "cat" adında ve "tabby" değerinde bir çerez saklamasını söyler.
Bu çerez ayarlandıktan sonra, tarayıcınızdan web sitesine gönderilen sonraki istekler Cookie: cat=tabby
başlığını içerir. Web sitesinin sunucusu, istek başlığındaki çereze erişebilir ve değeri kullanabilir.
Çerezlerin işleyiş şekli: adım adım
cats.example
web sitesini ziyaret ettiğinizi varsayalım. Site size rastgele bir kedi resmi göstermek ve size hangi kedinin gösterildiğini kaydetmek istiyor.
Aşağıdaki adımlarda, çerezlerle bunun nasıl yapılabileceği açıklanmaktadır.
1. Tarayıcı bir dosya ister
cats.example
web sitesinin ana sayfasını ziyaret edersiniz.
Tarayıcınız ana sayfa HTML'sini işledikten sonra cats.example
adresindeki cat.jpg
dahil olmak üzere sayfadaki dosyaları ister.

2. Web sitesi sunucusu yanıt verir
cats.example
adresindeki sunucu, cat.jpg
resim dosyasıyla yanıt verir.
Sunucu, yanıtla birlikte bir başlık ekler: Set-Cookie: cat=tabby
.

3. Tarayıcı yanıt alır
Tarayıcınız resim dosyasını alır ve içinde bulunan Set-Cookie: cat=tabby
başlığını işler.
Bir çerez saklanır: ad cat
, değer tabby
.

4. Tarayıcı ek istekler gönderir
Artık tarayıcınız, cats.example
adresine yapılan istekler için Cookie: cat=tabby
üst bilgisini içeriyor.

cats.example
web sunucusu bir istek aldığında çerezi işleyebilir ve bu değerle istediğini yapabilir (ör. size tekrar aynı tekir kedinin resmini göndermemesini sağlayabilir).
Çerez sürecinin tamamı şu şekildedir:
- Tarayıcınız, bir web sitesinin sunucusuna dosya isteği gönderir.
- Sunucu, isteğe yanıt olarak gönderdiği dosyayla birlikte
Set-Cookie: cat=tabby
gibi bir üstbilgi ekleyebilir. - Tarayıcınız yanıtı aldığında çerezi depolar.
- Tarayıcı, sonraki her istekle birlikte çerezi
Cookie: cat=tabby
başlığında sunucuya gönderir.

JavaScript ile çerezlere erişme
Önceki örnekte, çerez ayarlamak için Set-Cookie
yanıt üstbilgisi kullanılmaktadır.
Çerezler, document.cookie
yöntemi kullanılarak JavaScript ile de oluşturulabilir.
Demoyu deneyin: javascript-cookie.glitch.me.
Daha fazla bilgi: Belge: çerez mülkü.
Çerezlere neden ihtiyacımız var?
1994 yılında mühendis Lou Montulli, 1990'ların ortalarında en popüler web tarayıcısını geliştiren Netscape yazılım şirketinde çalışıyordu.
Bu sırada MCI adlı bir telekomünikasyon şirketi, dünyanın ilk online mağazalarından biri için alışveriş sepeti özelliği geliştirmeye çalışıyordu. MCI, sorununu açıklamak için Montulli ile iletişime geçti. Montulli, HTTP'ye bir özellik ekleyerek yanıt verdi. Bu özellik, sitelerin kullanıcının web tarayıcısında az miktarda metin, bir ad ve değer (cart-id=123
gibi) depolamasını sağlıyordu. O zamanlar programcılar, veri iletişimine dahil edilen küçük bir ek bilgi parçası için "sihirli çerez" kelimesini kullandığından, bu öğeye "çerez" adını verdi.
Lou, HTTP çereziyle ilgili çalışmalarını bir haftadan kısa sürede tamamladı. Çerezlerin reklamcılık, giriş, ödemeler, sahtekarlık algılama ve diğer kritik web hizmetleri için temel olacağını bilmiyordu. Çerezler, çok basit bir teknoloji olmasına rağmen geniş kapsamlı yan etkileri vardır.
Çerezlerin kullanım alanları
Çerezler, tarayıcıda kullanıcıyla ilgili küçük miktarda bilgi depolayarak birden fazla istek arasında bir şeyi "hatırlamasını" sağlar. Çerezlerin birden çok kullanımı vardır:
- Oturum yönetimi
Bir web sitesinin kullanıcıyı tanımasına izin verir. Örneğin, farklı sayfalarda oturum açmış durumda kalmak için. - Kişiselleştirme
Web sitesi deneyimini özelleştirmek için dil, tema veya en son görüntülenen öğeler gibi kullanıcı tercihlerini depolayın. - İzleme
Geçmişte çerezler, web siteleri genelinde kullanıcı davranışlarını izlemek, hedeflenen reklamcılık ve diğer kullanım alanları için kullanılıyordu.
Çerezler, bilgileri doğrudan depolamak yerine çoğunlukla tanımlayıcı olarak kullanılır.
Örneğin, bir online evcil hayvan mağazasındaki alışveriş sepetinize ait çerez, ürünleri listelemez. Bunun yerine, evcil hayvan mağazasının sunucu tarafındaki veri deposunda alışveriş sepetinizdeki ürünleri aramasına olanak tanıyan bir hesap kimliği sağlar.
Evcil hayvan mağazası sunucusuna gönderilen bir istek şuna benzer bir çerez üst bilgisi içerebilir:
Cookie: _cart=CART1.2.34567890.123456789
Sunucu daha sonra veri deposunda _cart
hesabını arayabilir ve istekle ilgili diğer bilgileri ekleyebilir.