Jquery-cookie: استخدام encodeURIComponent () في قيم ملفات تعريف الارتباط يجب أن يكون escape ()

تم إنشاؤها على ٢٠ يناير ٢٠١١  ·  5تعليقات  ·  مصدر: carhartl/jquery-cookie

هل encodeURIComponent () صحيح هنا للهروب من قيمة ملف تعريف الارتباط؟ ألا يجب أن يكون "هروبًا"؟

تأتي ملفات تعريف الارتباط داخل وخارج المكون الإضافي الخاص بك على ما يرام ، ولكن ملفات تعريف الارتباط التي تحتوي على اسم مسار لا يمكن استخدامها حقًا كما هي من قبل أي شخص آخر بسبب اختيارك للترميز.

التعليق الأكثر فائدة

فقط إذا وجد أي شخص آخر هذه المناقشة أثناء البحث عن إجابة كما فعلت:

يتم تمرير ملفات تعريف الارتباط إلى الخادم كرأس HTTP:

ملف تعريف الارتباط: name1 = value1 ؛ name2 = القيمة 2

من الواضح أن القيمة 1 غير مسموح لها أن تحتوي على ؛

هناك أيضا شخصيات أخرى إشكالية.

الحقيقة هي أن ملفات تعريف الارتباط يعوقها بشكل أساسي نقص التشفير. يجب عليك اختيار ترميز واستخدامه في كل من المتصفح والخادم.

توصي MDN بتشفير UIComponent: https://developer.mozilla.org/en-US/docs/Web/API/document.cookie

ال 5 كومينتر

سبب استخدام encodeURIComponent / decodeURIComponent هو أن escape / unescape تم إهماله .

بصرف النظر عن ذلك ، لم أفهم بعد ما هي المشكلة هنا. تعمل قيمة ملف تعريف الارتباط من خلال decodeURIComponent قبل إرجاعها ؛ وبالتالي ، ما لم أفقد شيئًا ما ، يجب أن يكون هو نفسه تمامًا كما كان عند تمريره إلى ملف تعريف الارتباط. هل يمكنك نشر خلاصة أو شيء ما لتوضيح المشكلة؟

أخيرًا وليس آخرًا ، يمكنك استخدام الخيار raw لتجاوز التشفير في المقام الأول.

أنت محق في أن يتم إهمالها. ربما يكون encodeURI () هو المطلوب حقًا بدلاً من encodeURIComponent ().

إليك المشكلة باختصار: لا يعمل الرمز الخاص بك إلا إذا تم إنشاء ملف تعريف الارتباط واستهلاكه عبر المكون الإضافي الخاص بك. إذا قمت بإنشاء ملف تعريف ارتباط مع المكون الإضافي الخاص بك ثم حاولت قراءته من تطبيق php أو java ، فيجب أن يعرف هذا التطبيق أن ملف تعريف الارتباط مشفر باستخدام encodeURIComponent () ويجب ترميزه () في الواجهة الخلفية.

المكان الرئيسي الذي يتسبب فيه هذا في حدوث مشكلة هو عندما تضع عنوان URL أو URI في ملف تعريف ارتباط. لنفترض أنني أريد وضع "/ foo" في ملف تعريف ارتباط. يمنحني EncodeURIComponent () اسم المسار غير القابل للاستخدام "٪ 2Ffoo" بينما يعطيني encodeURI () "/ foo" وهو قابل للاستهلاك مباشرة بواسطة أي نظام خلفي أو أي شخص آخر يستخدم ملف تعريف الارتباط بدون المكون الإضافي الخاص بك.

ميزة encode () هنا في الواقع هي أنه إذا كان لديك فاصلة منقوطة في قيمة ملف تعريف الارتباط ، فسيتم إفلاتها. لا يفلت encodeURI () من الفاصلة المنقوطة ، لذلك سيتعين عليك إضافة بعض التعليمات البرمجية للتعامل مع ذلك بالإضافة إلى استخدام encodeURI ().

Raw لا بأس به ، لكنني أفترض أنك ربما أضفت ذلك لأن الأشخاص واجهوا مشكلات في الترميز. إذا كنت تستخدم encodeURI () ، فمن المحتمل أنك لست بحاجة إليه بعد الآن.

سبب عدم تمكني من استخدام encodeURI :

encodeURI('foo;bar') == "foo;bar"

لكن:

encodeURIComponent('foo;bar') == "foo%3Bbar"

هذا الأخير هو السلوك الذي نريده.

raw في الواقع إلى الحساب للعب بشكل جيد مع الخادم.

أنا فضولي لماذا تريد هذا السلوك؟ تكافح للعثور على إجابة في مكان آخر http://stackoverflow.com/questions/5743119/why-use-encodeuricomponent-when-writing-json-to-a-cookie

فقط إذا وجد أي شخص آخر هذه المناقشة أثناء البحث عن إجابة كما فعلت:

يتم تمرير ملفات تعريف الارتباط إلى الخادم كرأس HTTP:

ملف تعريف الارتباط: name1 = value1 ؛ name2 = القيمة 2

من الواضح أن القيمة 1 غير مسموح لها أن تحتوي على ؛

هناك أيضا شخصيات أخرى إشكالية.

الحقيقة هي أن ملفات تعريف الارتباط يعوقها بشكل أساسي نقص التشفير. يجب عليك اختيار ترميز واستخدامه في كل من المتصفح والخادم.

توصي MDN بتشفير UIComponent: https://developer.mozilla.org/en-US/docs/Web/API/document.cookie

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات