لا يمكن تعيين ملفات تعريف الارتباط في IFRAME في IE، حتى مع رأس P3P

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

سؤال

لقد رأيت العديد من المنشورات هنا حول كيفية تشغيل ملفات تعريف الارتباط داخل إطار iframe في IE، وقد جربت العديد من الحلول، ولكن لم يحالفني الحظ حتى الآن.إليك ما أتعامل معه:

  • لدي إطار iframe تم إنشاؤه من خلال Javascript على موقع العميل (عنصر واجهة مستخدم). وليس لدي أي سيطرة على موقع العميل.أحتاج إلى تعيين ملفات تعريف الارتباط للحفاظ على تسجيل دخول المستخدم داخل iframe، وهو يعمل في Chrome وFirefox، ولكن ليس في IE 7/8.لم أختبر IE 6، ولكني أفترض أنه يعاني من نفس المشكلة.

  • لقد قمت بإنشاء سياسة P3P باستخدام محرر سياسة IBM، وقال المحرر إن السياسة المدمجة مقبولة ضمن أمان IE، سواء تم تعيينها على منخفض أو متوسط ​​أو مرتفع.CP الذي أستخدمه هو:

P3P: policyref="/w3c/p3p.xml" CP="CAO DSP COR CURa ADMa DEVa PSAa PSDa CONi TELi OUR IND PHY ONL UNI COM NAV INT DEM CNT PRE" (لقد قمت بتجريب العديد من برامج الـ CP الأخرى التي يقول الناس إنها فعالة، لكن لم أر أي فرق في النتيجة.)

  • يخدم خادم الويب (NGINX) رأس P3P هذا كل ملف.أنا لا أخدمها من الكود.

  • الملف p3p.xml موجود ويطابق سياسة الضغط.يتم التحقق من صحة p3p.xml باستخدام مدقق W3C P3P.

  • حتى مع وجود رأس P3P (بغض النظر عن النوع الذي جربته)، يمنحني IE "العين الشريرة" في شريط الحالة بالأسفل ولن يسمح لي بتعيين ملفات تعريف الارتباط.وتظهر على أنها محظورة في تقرير الخصوصية.

  • قرأت منشور Piskvor على SO حول هذا الموضوع: تم حظر/لم يتم حفظ ملف تعريف الارتباط في IFRAME في Internet Explorer لكنني لم أتمكن من إعادة إنتاج ما كان قادرًا على فعله على موقعه التجريبي: http://newmoon.wz.cz/test/page.php?send_p3p=1.أفترض أن هذا لأنني أصاب بالعين الشريرة وهو ليس كذلك.لقد فعلت كل ما قرأت عنه كتوصية للتخلص من الشر حتى الآن، ومع ذلك فهو مستمر.يسخر مني.

  • صفحتي التجريبية موجودة هنا إذا كنت تريد تجربتها: http://truelike.com/js/bobs/frametest.php تعمل صفحات المجموعة/القراءة بشكل جيد عند عرضها خارج إطار iframe، ولكنها لا تعمل على الإطلاق في الداخل عند استخدام IE.

  • كمرجع، أنا أستخدم PHP في الواجهة الخلفية.

أي مساعدة على الإطلاق ستكون موضع تقدير كبير - نحن نشعر باليأس هنا.

شكرًا!

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

المحلول

لذلك، قمت بحل هذا الأمر بنفسي.يبدو أن المشكلة كانت مع HTTPUserIDModule الخاص بـ NGINX (http://wiki.nginx.org/HttpUserIdModule).لقد كنت أستخدم ذلك لإرسال رأس P3P، ولكن لم يكن nginx يرسل الرأس باستمرار, ربما بسبب هذا السطر في وثائقهم:

يعين التوجيه قيمة للرأس P3P ، والذي سيتم إرساله مع ملف تعريف الارتباط.

كنت أرى الرؤوس تظهر عند التحقق باستخدام Curl أو Lynx، ولكن ليس عندما راجعت باستخدام Firebug أو Charles.ربما يوجد خيار تكوين لإصلاح هذه المشكلة، لكن لم أتمكن من العثور عليه.

على أي حال، إذا قمت بسحب توجيه الرأس خارج HTTPUserIdModule وأرسلت الرأس يدويًا في التعليمات البرمجية، فسيعمل.من المحتمل أن ينجح الأمر إذا قمت بإرسال الرأس يدويًا باستخدام HTTPHeadersModule http://wiki.nginx.org/HttpHeadersModule, ، لكنني لم أختبر هذا بعد.

بمجرد العمل من خلال التعليمات البرمجية، رأيت أنني لست بحاجة إلى الرأس في جميع الملفات - كان وجوده فقط في إعداد الملفات/الحصول على ملفات تعريف الارتباط كافيًا، على عكس الكثير من النصائح التي رأيتها.

بالإضافة إلى ذلك، يبدو أن برنامج CP الخاص بي كان عدوانيًا للغاية، على الرغم من أن محرر سياسة IBM قال إنه لا بأس بذلك.لقد استخدمت CP أكثر أساسية، وقد نجح ذلك.

نصائح أخرى

التغييرات مع nginx 0.8.20
إصلاح الخلل:لم يتم إخفاء خطوط رأس استجابة FastCgi "Set-Cookie" و "P3P" أثناء التخزين المؤقت إذا لم يتم استخدام توجيهات "fastcgi_hide_header" مع أي معلمات.

سجل تغييرات Nginx

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