فشل ASP.NET في التعامل مع ملفات تعريف الارتباط المحددة بشكل صحيح

StackOverflow https://stackoverflow.com/questions/2394561

سؤال

بالنسبة الى RFC, ، يمكن فصل ملفات تعريف الارتباط الفردية في رأس "ملف تعريف الارتباط" HTTP بواسطة الفواصل وكذلك بواسطة فاصلة. ومع ذلك ، لا يقوم ASP.NET بتحليل حالة الفواصل بشكل صحيح - فهي لا تحسب الفاصلة على أنها فاصل ، ولكنها تعتبرها مجرد جزء من القيمة.

علي سبيل المثالإذا أرسل العميل رأس Cookie: a=b, c=d, ، سيشهد تطبيق ASP.NET فقط ملف تعريف ارتباط واحد يسمى "A" مع القيمة "B ، C = D".

كحالة خاصة ، يحدث نفس الشيء عندما يرسل العميل العديد من رؤوس ملفات تعريف الارتباط (واحدة لكل ملف تعريف ارتباط) بدلاً من الجمع بين جميع ملفات تعريف الارتباط في رأس واحد. من منظور HTTP ، هذا صحيح تمامًا ، وفي مثل هذه الحالة يجب أن تكون القيمة الفعالة للرأس تسلسلًا لقيم جميع الحالات التي تفصل بينها الفواصل.

هل يعرف أي شخص حلًا (أو ربما إصلاحًا؟) لهذا الغرض؟ أنا على الإطلاق بحاجة إلى الحصول على هذا العمل ، لأنني لا أتحكم في العميل.

ملاحظة: من المفارقات ذلك ، حسب هذا الموضوع, ، سلوك .NET المدمج في HTTP (ويعرف أيضًا باسم httpwebrequest) هو عكس ذلك تمامًا ، ويسبب أيضًا مشاكل. :-)

هل كانت مفيدة؟

المحلول

أعتقد أن أبسط الحلول للحصول على السلوك المرغوب فيه (بغض النظر عن صحة المعايير) هو إنشاء httpmodule من شأنه تحليل هذه المعلومات بشكل صحيح من httpcontext.request.headers ووضع المعلومات التي تم تصحيحها في httpcontext.request.cokoies.

نصائح أخرى

من المعروف أن كل من RFC 2109 و RFC 2965 لا يصف الواقع.

يجب أن تنظر إلى Draft-IETF-HTTPSTATE-COOKIE وهو منتج عمل لمجموعة عمل IETF HTTPSTATE الجديدة.

الإصدار الذي ربطته هو عفا عليه الزمن. هذه آلية إدارة الدولة HTTP الوثيقة هي أحدث وأكبر ويحدد نصف الكولون. إنه يقول أنه يجب قبول الفواصل للتوافق في المستقبل ، لكن هذا غير مطلوب:

ملاحظة: للتوافق المتخلف ، يكون الفاصل في رأس ملف تعريف الارتباط هو شبه كولون (؛) في كل مكان. يجب أن يقبل الخادم أيضًا الفاصلة (،) كفاصل بين قيم ملفات تعريف الارتباط للتوافق المستقبلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top