Browser Support
Her çerez, bir anahtar/değer çiftinin yanı sıra çerezin ne zaman ve nerede kullanılacağını kontrol eden bir dizi özellik içerir.
SameSite özelliğinin (RFC6265bis'te tanımlanmıştır) kullanıma sunulması, çerezinizin birinci taraf veya aynı site bağlamıyla kısıtlanıp kısıtlanmadığını belirtmenize olanak tanır. Burada "site" ifadesinin tam olarak ne anlama geldiğini anlamak faydalı olacaktır.
Site, alan adı soneki ile alan adının hemen önündeki kısmın birleşimidir. Örneğin, www.web.dev alanı, web.dev sitesinin bir parçasıdır.
Önemli terim: Kullanıcı www.web.dev sitesindeyken static.web.dev sitesinden bir resim isterse bu, aynı site isteğidir.
Herkese açık son ek listesi, hangi sayfaların aynı sitede sayılacağını tanımlar. Yalnızca .com gibi üst düzey alanlara bağlı değildir, github.io gibi hizmetleri de içerebilir. Bu sayede your-project.github.io ve my-project.github.io ayrı siteler olarak sayılır.
Önemli terim: Kullanıcı your-project.github.io sitesindeyken my-project.github.io sitesinden bir resim isterse bu, siteler arası bir istektir.
Çerez kullanımını beyan etmek için SameSite özelliğini kullanın
Çerezdeki SameSite özelliği, bu davranışı kontrol etmek için üç farklı yöntem sunar. Özelliği belirtmemeyi seçebilir veya çerezi aynı site istekleriyle sınırlamak için Strict ya da Lax kullanabilirsiniz.
SameSite özelliğini Strict olarak ayarlarsanız çerezleriniz yalnızca birinci taraf bağlamında gönderilebilir. Yani çerezin sitesi, tarayıcının adres çubuğunda gösterilen siteyle eşleşirse gönderilebilir. Dolayısıyla, promo_shown çerezi aşağıdaki gibi ayarlanırsa:
Set-Cookie: promo_shown=1; SameSite=Strict
Kullanıcı sitenizdeyken çerez, beklendiği gibi istekle birlikte gönderilir.
Ancak kullanıcı başka bir siteden sitenize giden bir bağlantıyı takip ederse çerez bu ilk istekte gönderilmez.
Bu, her zaman ilk gezinmenin arkasında olan özelliklerle (ör. şifre değiştirme veya satın alma işlemi yapma) ilgili çerezler için iyidir ancak promo_shown gibi bir çerez için çok kısıtlayıcıdır. Okuyucunuz bağlantıyı takip ederek siteye girerse tercihinin uygulanabilmesi için çerezin gönderilmesini ister.
SameSite=Lax, tarayıcının bu üst düzey gezinmelerle çerezi göndermesine izin verir. Örneğin, başka bir site, sitenizin içeriğine referans veriyorsa (bu örnekte kedi fotoğrafınızı kullanıp makalenize aşağıdaki gibi bir bağlantı veriyorsa):
<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>
Çerez, Lax olarak şu şekilde ayarlanır:
Set-Cookie: promo_shown=1; SameSite=Lax
Tarayıcı, diğer kullanıcının blogu için amazing-cat.png isteğinde bulunduğunda siteniz çerezi göndermez. Ancak okuyucu, sitenizdeki cat.html bağlantısını takip ettiğinde bu istek çerezi içerir.
SameSite'i bu şekilde kullanmanızı, web sitesi görünümünü etkileyen çerezleri Lax, kullanıcı işlemleriyle ilgili çerezleri ise Strict olarak ayarlamanızı öneririz.
Çerezin tüm bağlamlarda gönderilmesini istediğinizi belirtmek için SameSite değerini None olarak da ayarlayabilirsiniz. Widget'lar, yerleştirilmiş içerik, satış ortağı programları, reklamlar veya birden fazla sitede oturum açma gibi diğer sitelerin kullandığı bir hizmet sunuyorsanız amacınızın net olması için None kullanın.
None, Lax veya Strict olarak işaretleyin.
SameSite olmadan varsayılan davranışta yapılan değişiklikler
Browser Support
SameSite özelliği yaygın olarak desteklenir ancak yaygın olarak benimsenmemiştir.
Geçmişte, SameSite olmadan ayarlanan çerezler varsayılan olarak tüm bağlamlarda gönderiliyordu. Bu durum, kullanıcıları CSRF'ye ve istenmeyen bilgi sızıntılarına karşı savunmasız bırakıyordu. IETF'nin Incrementally Better Cookies (Kademeli Olarak Daha İyi Çerezler) teklifi, geliştiricileri niyetlerini belirtmeye teşvik etmek ve kullanıcılara daha güvenli bir deneyim sunmak için iki önemli değişiklik öneriyor:
SameSiteözelliği olmayan çerezlerSameSite=Laxolarak değerlendirilir.SameSite=Noneiçeren çerezlerinSecureözelliğini de belirtmesi gerekir. Bu, güvenli bir bağlam gerektirdikleri anlamına gelir.
Bu değişikliklerin her ikisi de SameSite özelliğinin önceki sürümünü doğru şekilde uygulayan tarayıcıların yanı sıra önceki SameSite sürümlerini desteklemeyen tarayıcılarla geriye dönük olarak uyumludur. Bu değişiklikler, çerez davranışını ve kullanım amacını açık hale getirerek geliştiricilerin tarayıcıların varsayılan davranışına olan bağımlılığını azaltmayı amaçlar. SameSite=None öğesini tanımayan istemciler bu öğeyi yoksaymalıdır.
Varsayılan olarak SameSite=Lax
SameSite özelliğini belirtmeden bir çerez gönderirseniz tarayıcı bu çerezi SameSite=Lax olarak ayarlanmış gibi değerlendirir. Kullanıcı deneyiminizi tarayıcılar arasında daha tutarlı hale getirmek için SameSite=Lax değerini açıkça ayarlamanızı öneririz.
SameSite=None güvenli olmalıdır
SameSite=None kullanarak siteler arası çerezler oluşturduğunuzda, tarayıcının bunları kabul etmesi için Secure olarak da ayarlamanız gerekir:
Set-Cookie: widget_session=abc123; SameSite=None; Secure
Bu davranışı Chrome 76'dan itibaren about://flags/#cookies-without-same-site-must-be-secure özelliğini etkinleştirerek, Firefox 69'dan itibaren ise about:config sayfasında network.cookie.sameSite.noneRequiresSecure ayarını yaparak test edebilirsiniz.
Mevcut çerezleri de en kısa sürede Secure olarak güncellemenizi öneririz.
Sitenizde üçüncü taraf içerik sağlayan hizmetlerden yararlanıyorsanız servis sağlayıcınızın çerezlerini güncellediğinden emin olun ve sitenizdeki tüm snippet'leri veya bağımlılıkları yeni davranışı kullanacak şekilde güncelleyin.
SameSite kurabiye tarifi
SameSite=None ile ilgili bu değişiklikleri ve tarayıcı davranışındaki farklılıkları başarıyla işlemek için çerezlerinizi güncelleme hakkında daha fazla bilgi edinmek istiyorsanız SameSite çerezi tarifleri başlıklı makaleyi inceleyin.
Katkıları ve geri bildirimleri için Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner ve Vivek Sekhar'a teşekkür ederiz.