Set-Cookie başlığı başarıyla ayarlandı ama tarayıcı Cookie'mi neden kaydetmedi?
Bu en yaygın sorundur: tarayıcı aktif olarak hata vermez, yalnızca uyumsuz Cookie'leri sessizce atar. Yaygın nedenler şunlardır: SameSite=None için Secure eksikliği, Secure Cookie'nin bir HTTP sayfasından ayarlanması (localhost hariç), __Host-/__Secure- önekleri kısıtlamaları karşılamıyor, Domain/Path uyumsuzluğu, 4KB sınırı aşılıyor, Max-Age 0 veya negatif. Önce Set-Cookie'yi bu araca yapıştırarak uyarı rozetleriyle belirli nedeni tespit etmeniz, ardından Chrome DevTools → Application → Cookies'i açarak ilgili etki alanı altında sarı bir uyarı üçgeni olup olmadığını kontrol etmeniz önerilir — fareyle üzerine geldiğinizde reddin belirli nedenini göreceksiniz.
SameSite'ın Strict, Lax ve None arasındaki fark tam olarak nedir? Hangisini ne zaman kullanmalıyım?
Strict siteler arası gönderime hiç izin vermez, en güvenlisidir ancak kullanıcı harici sitelerdeki bağlantılara tıkladığında oturumu kapalı görünür, ödeme/şifre değiştirme gibi hassas işlem Cookie'leri için uygundur. Lax, Chrome 80+'nın varsayılan değeridir, kullanıcının harici bir bağlantıdan sitenize üst düzey GET gezinmesiyle dönmesi durumunda gönderime izin verir ancak iframe/img/script/XHR/POST formları gibi alt kaynaklarda gönderilmez, çoğu senaryo için önerilen değerdir. None, tüm siteler arası senaryolarda gönderime izin verir (SSO tek oturum açma, üçüncü taraf iframe yerleştirmeleri, siteler arası API çağrıları için kullanılır) ancak Secure'un aynı anda ayarlanmasını gerektirir, aksi takdirde tarayıcı doğrudan reddeder.
SameSite=None neden Secure ile birlikte kullanılmak zorunda?
Bu, Chrome tarafından 80 sürümünden (Şubat 2020) itibaren zorunlu kılınan ve Firefox, Edge ve Safari'nin takip ettiği bir kuraldır. SameSite=None, Cookie'lerin siteler arası gönderimine açıkça izin verdiğinden, saldırganların siteler arası senaryolarda CSRF veya dinleme başlatması daha kolaydır, riskleri azaltmak için Secure (HTTPS şifreli iletim) ile birlikte kullanılması gerekir. SameSite=None Cookie'niz HTTP üzerinden ayarlanırsa, tarayıcı onu kaydetmeden atacaktır. Bu araç, SameSite=None'ın Secure olmadan kombinasyonunu tespit eder ve kırmızı bir uyarı ile işaretler.
Hangisini kullanmalıyım: Max-Age mi Expires mı? Farkları neler?
Max-Age'i tercih edin. Max-Age göreceli zamandır (kaç saniye sonra süresi dolar), istemci saatine bağlı değildir, tarayıcı aldığında geri sayımı başlatır; Expires mutlak bir zaman noktasıdır, kullanıcının bilgisayarının yerel saatine bağlıdır (kullanıcı saati 1970'e çekerse Cookie hemen süresi dolar). İkisi birden mevcut olduğunda Max-Age daha yüksek önceliğe sahiptir (RFC 6265'te açıkça belirtilmiştir). Hiçbiri ayarlanmazsa Cookie, tarayıcı kapatıldığında süresi dolan bir «oturum Cookie'si» haline gelir. Bu araç, Expires ayarlandığında ancak Max-Age ayarlanmadığında bir ipucu verir ve Max-Age eklenmesini önerir. Max-Age biriminin milisaniye değil saniye olduğunu unutmayın.
Path=/ ile Path ayarlamamak arasındaki fark nedir?
Path, tarayıcının isteklerde bu Cookie'yi hangi URL yollarında göndereceğini belirler. Path ayarlanmadığında, tarayıcı varsayılan olarak «yanıt URL'sinin son segmenti çıkarılmış yolunu» kullanır. Örneğin /api/user/login'den bir Cookie ayarlarken varsayılan Path /api/user/'dir, bu nedenle / ve /order/ yollarındaki istekler bu Cookie'yi göndermez. Path=/ öğesini açıkça ayarlamak, Cookie'nin tüm site için geçerli olmasını sağlar. Path eşleştirmesinin önek eşleştirmesi olduğunu unutmayın — Path=/api ayrıca /api/, /api/user, /api/v2/abc vb. ile de eşleşir. __Host- önekli Cookie'ler zorunlu olarak Path=/ gerektirir.
Başında nokta olan Domain (örneğin .example.com) ile nokta olmayan Domain arasındaki fark nedir?
Modern tarayıcılarda (Chrome, Firefox, Edge, Safari'nin güncel sürümleri) ikisi zaten eşdeğerdir: her ikisi de Cookie'nin example.com ve tüm alt alan adları (a.example.com, b.c.example.com) için geçerli olmasını sağlar. Baştaki nokta RFC 2109 zamanından kalma eski bir sözdizimiydi — RFC 6265, baştaki noktanın göz ardı edildiğini zaten açıkça belirtmiştir. Bununla birlikte, okunabilirlik için noktasız yazılması önerilir. Bu araç, Domain'in başında nokta olduğunda bir ipucu verir (hata değildir, ancak eski bir sözdizimidir). Unutmayın: Domain ayarlanmadığında Cookie yalnızca geçerli ana bilgisayar için geçerlidir (alt alan adları almaz), Domain ayarlandığında alt alan adları için geçerli olmaya başlar.
__Host- ve __Secure- önekleri nedir? Önekler olmadan çalışabilir miyim?
Bunlar, yüksek güvenlikli Cookie'lere sıkı kısıtlamalar getirmek için RFC 6265bis'te tanıtılan Cookie adı güvenlik önekleridir: tarayıcı Cookie adının __Host- ile başladığını gördüğünde, zorunlu olarak Secure, Path=/ ve Domain özelliğinin ayarlanmamış olmasını gerektirir — herhangi bir koşul karşılanmazsa depolamayı doğrudan reddeder; __Secure- öneki Secure'un ayarlanmasını gerektirir, diğer özellikler yapılandırılabilir. Önekler olmadan da çalışılabilir (çoğu Cookie önek kullanmaz), ancak oturum tanımlayıcıları, yetkilendirme belirteçleri gibi yüksek güvenlikli Cookie'ler için __Host- önekinin kullanılması kesinlikle önerilir, çünkü alt alan adı/yol düzeyinde Cookie enjeksiyonu saldırılarını önler. Bu araç, her iki önekin uyumluluğunu otomatik olarak kontrol eder.
HttpOnly Cookie gerçekten güvenli midir? XSS ve CSRF'yi önler mi?
HttpOnly, JavaScript'in cookie değerlerini document.cookie aracılığıyla okumasını engeller, <strong>XSS yoluyla oturum hırsızlığını azaltmak</strong> için önemli bir savunma hattıdır, ancak mucizevi bir çözüm değildir: XSS saldırganları hala kullanıcının tarayıcısında (istekler otomatik olarak Cookie taşır) eylemler gerçekleştirmek için istekler yapabilir (bu CSRF'nin kapsamıdır); HttpOnly ayrıca CSRF saldırılarına karşı savunma yapmaz (SameSite veya CSRF Token gerekir). HttpOnly+Secure+SameSite=Lax/Strict üçlüsünün aynı anda kullanılması ancak temel güvenlik seviyesine ulaşır. Hassas Cookie'ler (session, JWT, access_token) HttpOnly olmalıdır, zorunlu olmadıkça ön uç JS'ine erişim vermeyin. Bu araç, HttpOnly'si olmayan Cookie'leri bir uyarı ile işaretler.
Partitioned (CHIPS) Cookie nedir? Ne zaman kullanmam gerekir?
Partitioned, Chrome tarafından üçüncü taraf Cookie'lerin kaldırılmasına yanıt olarak sunulan yeni bir özelliktir, tam adı Cookies Having Independent Partitioned State'tir (CHIPS). Geleneksel üçüncü taraf Cookie'leri (birden fazla sitede ayarlanan reklam/yerleşik hizmetler gibi) küresel olarak paylaşılır ve kullanıcıları siteler arası izlemek için kullanılabilir. Partitioned ile tarayıcı, üçüncü taraf Cookie'yi üst düzey site başına ayrı olarak depolar: kullanıcının A Sitesinde gördüğü üçüncü taraf Cookie, B Sitesinde gördüğünden tamamen bağımsızdır ve siteler arası kimlik paylaşamaz. Kullanım senaryoları: yerleşik video/harita/ödeme bileşenleri, üçüncü taraf destek eklentileri, iframe'e yerleştirilmiş siteler arası SSO. Partitioned kullanımı Secure'un aynı anda ayarlanmasını gerektirir, __Host- öneki ile kullanılması önerilir.
Bir Cookie en fazla ne kadar depolayabilir? Etki alanı başına kaç Cookie sığabilir?
RFC 6265'e göre tarayıcılar Cookie başına en az 4096 bayt desteklemelidir (ad, değer ve özellikler dahil), ana tarayıcılar (Chrome/Firefox/Safari/Edge) bu sınıra uyar — sınırı aşan içerik sessizce kesilir veya atılır. Sayı sınırları tarayıcıya göre değişir: Chrome etki alanı başına yaklaşık 180, Firefox yaklaşık 150, Safari yaklaşık 600 (ve ITP'nin yedi günlük temizleme politikasından etkilenir); aşıldığında tarayıcı en eski Cookie'leri LRU politikasına göre kaldırır. Cookie'lerin yalnızca oturum tanımlayıcılarını saklaması önerilir, büyük iş verisi parçalarını Cookie'lere koymayın (iş verilerini localStorage'a veya sunucu oturumuna koyun).
Araç, Set-Cookie'yi doğrudan Chrome DevTools'tan kopyalayıp ayrıştırmayı destekliyor mu? Öneki manuel olarak kaldırmam gerekir mi?
Tamamen destekler, manuel işleme gerek yoktur. Chrome DevTools'un Network panelinde hedef isteğe tıklayabilir, Set-Cookie değerini Response Headers alanında sağ tıklayarak doğrudan kopyalayabilir (birden fazla satır için Ctrl/⌘+tıklama ile çoklu seçim yapın veya tüm bloğu kopyalayın) ve bu aracın giriş alanına yapıştırabilirsiniz. Araç, Set-Cookie: önekini her satırın başından otomatik olarak kaldırır (büyük/küçük harfe duyarsız), satır başındaki/sonundaki boşlukları otomatik olarak işler, Expires tarihlerindeki virgül ve noktalı virgül gibi özel karakterleri doğru şekilde işler ve ayrıca çift tırnak içindeki Cookie değerlerini doğru şekilde işler.
Cookie değerlerindeki Çince veya özel karakterler neden %XX biçimine dönüşüyor?
RFC 6265, Cookie değerlerinin yalnızca ASCII karakter setinin güvenli bir alt kümesini kullanmasını gerektirir ve doğrudan ASCII olmayan karakterler, boşluklar, virgüller, noktalı virgüller vb. içeremez. Çoğu sunucu çerçevesi, Cookie'leri ayarlarken ASCII olmayan karakterler için otomatik olarak URL kodlaması (encodeURIComponent/Percent-encoding) gerçekleştirir. Tarayıcılar da geri gönderirken kodlanmış biçimi korur. Bu araç, değerin %XX kodlaması içerdiğini tespit ettiğinde, decodeURIComponent ile çözülmüş orijinal metni ham değerin yanında yeşil bir ok ile otomatik olarak gösterir, böylece gerçek içeriği görüntülemek kolaylaşır.
Set-Cookie ile Cookie istek başlığı arasındaki fark nedir?
Bunlar tamamen farklı yönlere sahip başlıklardır: Set-Cookie bir yanıt başlığıdır (sunucu→tarayıcı), yalnızca yanıtlarda görünür, birden fazla kez görünebilir, her seferinde tam özelliklere (Secure/HttpOnly/Path/Domain vb.) sahip bir Cookie ayarlar; Cookie bir istek başlığıdır (tarayıcı→sunucu), istek başına yalnızca bir kez görünür, mevcut kapsamla eşleşen tüm Cookie'lerin name=value çiftlerini düz biçimde içerir (name1=v1; name2=v2), hiçbir özellik bilgisi içermez. Yani sunucu, bir istekte belirli bir Cookie'nin HttpOnly veya Secure ayarlı olup olmadığını bilemez — özellik bilgileri yalnızca tarayıcı tarafından yerel depolamada tutulur. İsteklerdeki Cookie başlığını ayrıştırmak için eşlik eden <a href='/network/http-cookie-parser/'>Cookie istek başlığı ayrıştırıcısını</a> kullanın.
Safari'de Cookie'lerim neden birkaç gün sonra kayboluyor?
Bu, Safari'nin Akıllı İzleme Önleme (ITP: Intelligent Tracking Prevention) mekanizmasının çalışmasıdır. ITP 2.1'den itibaren, kullanıcı 7 gün boyunca etki alanıyla doğrudan etkileşimde bulunmazsa (yani o etki alanının sitesini doğrudan ziyaret etmezse), Safari, Max-Age/Expires ne kadar uzun ayarlanmış olursa olsun, o etki alanı altındaki tüm Cookie'leri ve site verilerini temizler. Bu en çok yerleşik üçüncü taraf hizmetleri etkiler, ana sitenin Cookie'leri ise kullanıcı siteyi ziyaret etmeye devam ettiği sürece etkilenmez. Ayrıca Safari'nin üçüncü taraf Cookie'lere yönelik kısıtlamaları Chrome'dan daha sıkıdır. Çözümler şunları içerir: Partitioned özelliğini kullanmak, Storage Access API aracılığıyla izin istemek veya kullanıcı ana siteyi ziyaret ettiğinde Cookie'yi yenilemek. Bu aracın sorun giderme bölümü, Safari'de hata ayıklama için daha ayrıntılı yönergeler içerir.
Araç birden fazla Set-Cookie'nin toplu olarak ayrıştırılmasını destekliyor mu? Cookie içeriği sunuculara gönderiliyor mu?
Toplu ayrıştırmayı destekler. Giriş alanı, herhangi bir sayıda Set-Cookie satırının yapıştırılmasını destekler (tüm bir yanıt başlığı bloğunu bir kerede yapıştırmak gibi), her Set-Cookie bağımsız numaralandırma ile ayrıştırılır, birden fazla özellik kartı ayrı ayrı özellikleri ve uyarıları gösterir. Tüm ayrıştırma süreci tamamen tarayıcınızda yerel olarak gerçekleştirilir (yalnızca ön uç JavaScript işleme), Cookie içeriği hiçbir sunucuya gönderilmez, hiçbir ağ isteği yapılmaz — yapıştırdığınız Session/Token gibi hassas bilgiler bilgisayarınızdan çıkmaz, gönül rahatlığıyla kullanabilirsiniz.