Çerez, tarayıcıda saklanan ve bir web sitesinin özelliklerini çalıştırmak için ihtiyaç duyduğu durumu ve diğer bilgileri korumak amacıyla kullanılan bir veri parçasıdır.
Çerez, web sitelerinin kullanıcıların makinelerinde depoladığı küçük bir dosyadır. Depoladığı bilgiler, tarayıcı ile web sitesi arasında gidip gelir.
Her çerez, bir anahtar/değer çiftiyle birlikte çerezin ne zaman ve nerede kullanılacağını denetleyen bir dizi özelliktir. Bu özellikler, geçerlilik bitiş tarihleri gibi ayarları yapmak veya çerezin yalnızca HTTPS üzerinden gönderilmesi gerektiğini belirtmek için kullanılır. Çerezi, HTTP üstbilgisinde veya JavaScript arayüzü aracılığıyla ayarlayabilirsiniz.
Çerezler, web sitelerine kalıcı durum eklemek için kullanılan yöntemlerden biridir. Yıllar içinde becerileri büyüdü ve gelişti, ancak platformdan bazı sorunlu eski sorunlar kaldı. Bu sorunu gidermek amacıyla tarayıcılar (Chrome, Firefox ve Edge dahil), gizliliği daha fazla korumaya yönelik varsayılanlar uygulamak için davranışlarını değiştirmektedir.
Çerezlerin işleyiş şekli
Kullanıcılarınıza "Yenilikler" tanıtımı görüntülemek istediğiniz bir blogunuz olduğunu varsayalım. Kullanıcılar tanıtımı kapatabilir ve bir süre daha göremezler. Bu tercihi bir çerezde depolayabilir, bir ay içinde süresi dolacak (2.600.000 saniye) ve bunu yalnızca HTTPS üzerinden gönderebilirsiniz. Bu başlık şöyle görünür:
Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
![Yanıtta bir sunucudan tarayıcıya üç çerez gönderiliyor](https://web.dev/static/articles/understanding-cookies/image/three-cookies-being-sent-1.png?authuser=5&hl=tr)
Set-Cookie
üstbilgisini kullanarak çerezleri ayarlar.
Okuyucunuz bu gereksinimleri karşılayan bir sayfayı görüntülediğinde (güvenli bağlantıdaysanız ve çerez bir aydan daha yeniyse) tarayıcısı, isteğinde şu üst bilgiyi gönderir:
Cookie: promo_shown=1
![İstekte tarayıcıdan sunucuya gönderilen üç çerez](https://web.dev/static/articles/understanding-cookies/image/three-cookies-being-sent-2.png?authuser=5&hl=tr)
Cookie
üstbilgisine geri gönderir.
Ayrıca, document.cookie
kullanarak JavaScript'te bu siteye çerezler ekleyebilir ve mevcut çerezleri okuyabilirsiniz. document.cookie
öğesine atama yapıldığında bu anahtara sahip bir çerez oluşturulur veya geçersiz kılınır. Örneğin, tarayıcınızın JavaScript
konsolunda aşağıdakileri deneyebilirsiniz:
→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"
document.cookie
okunduğunda mevcut bağlamda erişilebilen, her çerez noktalı virgülle ayrılmış şekilde tüm çerezler oluşturulur:
→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
![Tarayıcıda çerezlere erişen JavaScript](https://web.dev/static/articles/understanding-cookies/image/javascript-accessing-cook-4ae4ebde94edc.png?authuser=5&hl=tr)
document.cookie
kullanarak çerezlere erişebilir.
Bu seçeneği bazı popüler sitelerde denerseniz çoğunun, yalnızca üçten çok daha fazla çerez oluşturduğunu görürsünüz. Çoğu durumda, bu çerezler söz konusu alana gönderilen her bir istekte gönderilir ve bunun bir dizi etkisi vardır. Yükleme bant genişliği genellikle kullanıcılarınız için indirme işleminden daha kısıtlıdır. Bu nedenle, tüm giden isteklere ilişkin ek yük ilk bayta geçiş sürenizde bir gecikme oluşturur. Belirlediğiniz çerezlerin sayısını ve boyutunu sınırlı tutun. Çerezlerin gerekenden daha uzun süre kalmamasını sağlamak için Max-Age
özelliğinden yararlanın.
Birinci taraf ve üçüncü taraf çerezleri nedir?
Daha önce baktığınız aynı site seçkisine geri dönerseniz, yalnızca şu anda ziyaret ettiğiniz alan için değil, çeşitli alan adları için çerezlerin bulunduğunu fark etmişsinizdir. Mevcut sitenin alan adıyla (tarayıcının adres çubuğunda görüntülenen) eşleşen çerezler birinci taraf çerezleri olarak adlandırılır. Benzer şekilde, geçerli site dışındaki alanlardan gelen çerezlere üçüncü taraf çerezleri denir. Bu, mutlak bir etiket değildir ancak kullanıcının bağlamına göre değişir; kullanıcının o anda hangi sitede olduğuna bağlı olarak aynı çerez birinci veya üçüncü taraf olabilir.
![Aynı sayfadaki farklı isteklerden tarayıcıya gönderilen üç çerez](https://web.dev/static/articles/understanding-cookies/image/three-cookies-being-sent-93367a53e4231.png?authuser=5&hl=tr)
Yukarıdaki örnekten devam ettiğimizde, blog yayınlarınızdan birinde özellikle muhteşem bir kedi resminin bulunduğunu ve /blog/img/amazing-cat.png
adresinde barındırıldığını varsayalım. Bu harika bir resim olduğu için, başka bir kişi
bunu doğrudan kendi sitesinde kullanıyor. Bir ziyaretçi blogunuzu ziyaret ettiyse ve promo_shown
çerezine sahipse bu kişi diğer kullanıcının sitesinde amazing-cat.png
adresini görüntülediğinde bu resim isteğinde bu çerez gönderilir. promo_shown
, bu diğer kişinin sitesinde herhangi bir işlem için kullanılmadığından, yalnızca isteğe ek yük getirdiğinden bu yöntem hiç kimse için özellikle faydalı değildir.
Bu istenmeyen bir etkiyse neden bunu yapmak isteyesiniz? Bu mekanizma, sitelerin üçüncü taraf bağlamında kullanıldığında durumlarını korumalarını sağlar. Örneğin, sitenize bir YouTube videosu yerleştirirseniz ziyaretçiler, oynatıcıda "Daha sonra izle" seçeneğini görür. Ziyaretçiniz YouTube'da zaten oturum açmışsa bu oturum, bir üçüncü taraf çerezi tarafından yerleştirilmiş oynatıcıda kullanılabilir hale getirilir. Bu da "Daha sonra izle" düğmesi, oturum açmalarını istemek veya sayfanızdan ayrılıp YouTube'a geri dönmek zorunda kalmalarını istemek yerine videoyu tek seferde kaydeder.
![Aynı çerez üç farklı bağlamda gönderiliyor](https://web.dev/static/articles/understanding-cookies/image/the-same-cookie-being-sen-8e25fd5cdbf86.png?authuser=5&hl=tr)
Web'in kültürel özelliklerinden biri de varsayılan olarak açık olmasıdır. Çok sayıda kişinin bu platformda kendi içeriklerini
ve uygulamalarını oluşturabilmesini sağlayan şey de bu. Ancak bu durum, güvenlik ve gizlilikle ilgili birtakım endişeleri de beraberinde getirdi. Siteler arası istek sahtekarlığı (CSRF) saldırıları, çerezlerin belirli bir kaynağa gönderilen isteklere eklenmesine dayanır. Bu işlem, isteği kimin başlatırsa başlatacaktır. Örneğin, evil.example
adresini ziyaret ederseniz bu site your-blog.example
isteklerini tetikleyebilir ve tarayıcınız ilişkili çerezleri memnuniyetle ekler. Blogunuz bu istekleri doğrulama konusunda dikkatli değilse evil.example
, yayınları silme veya kendi içeriğini ekleme gibi işlemleri tetikleyebilir.
Kullanıcılar, çerezlerin birden çok sitedeki etkinliklerini izlemek için çerezlerin nasıl kullanılabileceği konusunda da daha bilinçli hale geliyor. Ancak şimdiye kadar çerezle ilgili amacınızı açık bir şekilde ifade etmenin bir yolu yoktu. promo_shown
çereziniz yalnızca birinci taraf bağlamında gönderilmelidir. Diğer sitelere yerleştirilmesi amaçlanan bir widget'ın oturum çerezi ise kasıtlı olarak üçüncü taraf bağlamında oturum açık durumunu sağlamak amacıyla kullanılır.
Uygun SameSite özelliğini ayarlayarak amacınızı bir çerezle açık bir şekilde belirtebilirsiniz.
Birinci taraf çerezlerinizi tanımlamak ve uygun özellikleri ayarlamak için Birinci taraf kurabiye tarifleri başlıklı makaleye göz atın.