SitePoint'teki bir makaleye atıfta bulunan cevap tamamen eksiksiz değil. Bakınız RFC 6265 (olmaya fuarı, bu RFC bu soruyu önceki yerine geçer, hangi yayınlanmıştır sonra 2011 yılında piyasaya sürüldü RFC 2965 , 2000 ve gelen RFC 2109 1997).
Bölüm 5.4 , alt bölüm 2 şunu söylemektedir:
Kullanıcı aracısı, çerez listesini aşağıdaki sırayla SIRALAMALIDIR:
- Daha uzun yolları olan tanımlama bilgileri, daha kısa yolları olan tanımlama bilgilerinden önce listelenir.
NOT: Tüm kullanıcı aracıları çerez listesini bu sıraya göre sıralamaz, ancak bu sıra, bu belge yazılırken yaygın uygulamayı yansıtır ve geçmişte bu sıraya bağlı (hatalı olarak) sunucular olmuştur.
Bölüm 4.2.2'de de şu küçük mücevher var :
... sunucular serileştirme sırasına GÜVENMEMELİDİR. Özellikle, Çerez başlığı aynı ada sahip iki çerez içeriyorsa (örneğin, farklı Yol veya Etki Alanı öznitelikleriyle ayarlanmış olanlar), sunucular bu çerezlerin başlıkta görünme sırasına güvenmemelidir.
Senin örneğin isteği çerezindeki ( Cookie: a = 2; a = 1 ) yolu ile çerez grubu olduğu not / örneğin ( a = 2 ) yolu ile olandan daha uzun bir yol vardır / ( a = 1 ) ve onunla yüzden şartnamenin önerisiyle eşleşen ilk sırada size geri gönderilir. Böylece az ya da çok doğru senin varsayımı altında oradaki vardır verebilir ilk değeri seçin.
Ne yazık ki, RFC'lerde kullanılan dil son derece spesifiktir - GEREKLİ ve GEREKLİ sözcüklerinin kullanımı RFC'lerde belirsizlik yaratmamalıdır. Bu kuralları belirtmek gerekir izlenecek fakat değildir gerekli spec uyumlu olmak üzere. Bunun için RFC'yi oldukça iyi anlasam da, gerçek dünyadaki müşterilerin ne yaptığını görmek için araştırma yapmadım; HTTP istemcileri olarak görev yapan bir veya daha fazla tarayıcı veya diğer yazılımlar , Cookie: başlığında ilk olarak en uzun yol tanımlama bilgisini (örneğin: / example ) gönderemeyebilir .
Çerezin değerini kontrol edebilecek bir konumdaysanız ve çözümünüzü kusursuz hale getirmek istiyorsanız, en iyisi şunlardan biri olur:
belirli yollarda geçersiz kılmak için farklı bir çerez adı kullanmak, örneğin:
- Set-çerez: a-global = 1; Yol = /; Sürüm = 1
- Set-cookie: a-example = 2; Path = / example; Sürüm = 1
İhtiyacınız olan yolu çerez değerinin kendisinde saklamak:
- Set-çerez: a = 1 & yol = /; Yol = /; Sürüm = 1
- Set-çerez: a = 2 & yol = / örnek; Yol = / örnek; Sürüm = 1
Bu geçici çözümlerin her ikisi de, istenen URL'yi mevcut tanımlama bilgileri listesiyle karşılaştırarak istenen tanımlama bilgisi değerini seçmek için sunucuda ek mantık gerektirir. Çok hoş değil. Talihsizlik, RFC'nin daha uzun bir yolun daha kısa bir yola sahip bir çerezi tamamen geçersiz kılmasını gerektirecek öngörüye sahip olmaması talihsiz bir durumdur (örneğin, sizin örneğinizde, yalnızca Çerez: a = 2 alacaksınız ).