متوفر أيضًا بلغات أخرى: English · Español · Português · Français
ترويسة Set-Cookie: السمات وSameSite والبادئة __Host-
ركّب ترويسة كعكة أو الصق واحدة، لتعرف هل سيخزّنها المتصفح أم يرميها دون أن ينبس.
ما ترويسة Set-Cookie؟
Set-Cookie هي الطريقة التي يطلب بها الخادم من المتصفح أن يتذكّر شيئًا. والترويسة اسمٌ وقيمة تتبعهما سمات تقرّر كم تعيش الكعكة، وأي الطلبات تحملها، وهل تستطيع الشيفرة قراءتها: Expires وMax-Age وDomain وPath وSecure وHttpOnly وSameSite.
وموضع كتابة هذه القواعد أعجب من القواعد نفسها. فـRFC 6265، وهو المعيار المنشور سنة 2011، يعرّف الست الأولى، ولا ترد فيه كلمة SameSite ولا مرة واحدة، ولا يرد فيه __Host- ولا __Secure- أصلًا. وثلاثتها في draft-ietf-httpbis-rfc6265bis، وهي مسوّدة إنترنت لم تُرقَّ إلى RFC قط، ومراجعتها الثانية والعشرون، وهي الحالية، تحمل تاريخ انتهاء 4 يونيو 2026.
والمتصفحات كلها تنفّذ المسوّدة. فالقواعد التي تقرّر هل كعكة جلستك آمنة هي رسميًّا في وثيقة منتهية، بينما الوثيقة المعيارية لا تقول عنها شيئًا. والأمران يُتحقَّق منهما في ملفّين، وهذه الصفحة تبيّن من أي وثيقة جاءت كل سمة.
طريقة الاستخدام
- اكتب الترويسة أو الصقها. قيمة الحقل وحدها دون البادئة Set-Cookie:. وأزرار السمات وحقل النص شيء واحد، فالعبث بأحدهما يعيد كتابة الآخر.
- اقرأ الحكم أولًا. يقول السطر الأعلى هل سيخزّن المتصفح الكعكة أم يرفضها، فهاتان النتيجتان وحدهما هما المهمّتان، والثانية غير مرئية أثناء التشغيل.
- وإن رُفضت فاستعمل زر الإصلاح. يعيد كتابة الكعكة بالبادئة __Host- والسمات الثلاث التي تشترطها، وهي أقوى صورة تتخذها كعكة.
البادئات تُطبَّق في صمت
الكعكة التي يبدأ اسمها بـ__Host- يجب أن تحمل Secure، ويجب أن يكون فيها Path=/ بالضبط، ويجب ألّا تحمل سمة Domain. وأما التي تبدأ بـ__Secure- فتحتاج Secure وحدها. فإن أخطأت في أي من ذلك لم يحذّرك المتصفح ولم يسجّل شيئًا، بل امتنع ببساطة عن تخزين الكعكة، فيصل الطلب التالي بلا كعكة. ولهذا يظهر هذا الصنف من الخطأ عادةً على هيئة تسجيل دخول توقّف عن العمل لا على هيئة مشكلة في ترويسة.
والبادئتان ليستا قاعدة واحدة، والخلط بينهما هو الخطأ الشائع. فـ__Secure- تسمح بـDomain وبأي Path، أما __Host- فتمنع Domain تحديدًا لأن ذلك هو ما يربط الكعكة بمضيف واحد بعينه بدل مشاركتها مع كل نطاق فرعي. فإن كان نطاق فرعي لا تسيطر عليه سيطرة تامة يستطيع وضع كعكات، فهذا الفرق هو الحدّ الأمني كله.
والبادئات كذلك حسّاسة لحالة الأحرف بنصّ المواصفة نفسها. فالاسم الذي يبدأ بـ__host- بحروف صغيرة لا ينال أي حماية وهو يوهم بعكس ذلك تمامًا، ولهذا تذكره هذه الصفحة نتيجةً مستقلة بدل السكوت عنه.
وSameSite=None يجري على النمط نفسه: فهو يشترط Secure، وبدونه تُرفَض الكعكة. وهذا يوقع المسارات المضمَّنة والعابرة للمواقع باستمرار، لأن القيمة التي تبدو الأكثر تساهلًا هي التي عليها شرط زائد.
ما لا تفعله هذه الصفحة
هي تفحص ترويسة واحدة معزولة. فلا سبيل لها إلى معرفة هل أنت على HTTPS، وكعكات Secure تُسقَط على HTTP الصريح مهما بدت الترويسة سليمة؛ ولا تعرف نطاقك، فلا تستطيع إخبارك هل الـDomain الذي وضعته مما يحقّ لك وضعه.
ولا تفرض Partitioned، وهي سمة CHIPS. فـPartitioned لا ترد ولا مرة في المراجعة الثانية والعشرين من 6265bis — إذ هي في مسوّدة أخرى — ولذا تدرجها هذه الصفحة على أنها معرَّفة في مكان آخر بدل الإيهام بأنها من الوثيقة نفسها.
وهي تعرض ما تقوله المواصفات لا ما يفعله إطار عملك. فأكثر الأطر تضع الكعكات عبر دالة مساعدة لها قيمها الافتراضية، وعدد منها يضع SameSite=Lax عنك سواء طلبته أو لم تطلبه. وفحص الترويسة التي ترسلها فعلًا هو الخطوة النافعة، وهذه الصفحة تخبرك بمعنى تلك الترويسة.
لماذا هي مجانية؟
القواعد جدول صغير، والتحليل يجري في متصفحك أنت. فلا يُرفع شيء مما تكتبه، ولا يُسجَّل شيء، ولا حساب عليك إنشاؤه.
بلا تسجيل، وبلا حدود، وبلا علامة مائية على أي شيء تنسخه.