سؤال

سأستبدل ملفات تعريف الارتباط بـ التخزين المحلي على المتصفحات التي يمكن أن تدعمها (أي شخص غير IE). المشكلة هي site.com و www.site.com تخزين كائنات LocalStorage المنفصلة الخاصة بهم. أعتقد أن www يعتبر نطاقًا فرعيًا (قرارًا غبيًا إذا سألتني). إذا كان المستخدم في الأصل site.com ويقرر الكتابة www.site.com في زيارتها القادمة ، ستكون جميع بياناتها الشخصية يمكن الوصول إليها. كيف أحصل على كل "النطاقات الفرعية" الخاصة بي لمشاركة نفس المستحضر المحلي مثل المجال الرئيسي؟

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

المحلول

هذه هي الطريقة التي أستخدم بها عبر المجالات ...

  • استخدم iframe من مجال الوالدين - قل parent.com
  • ثم في كل مجال من الأطفال ، ما عليك سوى القيام بعد postmessage
  • كل ما عليك فعله هو إعداد بروتوكول لكيفية تفسير رسائل ما بعدك للتحدث إلى Iframe Parent.com.

اتمني ان يكون مفيدا :)

نصائح أخرى

إذا كنت تستخدم حل IFRAME و PostMessage فقط لهذه المشكلة بالذات ، فأعتقد أنه قد يكون أقل عمل (كل من الكود والحساب) إلى فقط إلى فقط قم بتخزين البيانات الموجودة في ملف تعريف الارتباط دون النطاق الفرعي ، وإذا لم تكن موجودة بالفعل في LocalStorage ، فانتقل إليها من ملف تعريف الارتباط.

الايجابيات:

  • لا يحتاج إلى إعداد Iframe و postmessage الإضافي.

سلبيات:

  • سيجعل البيانات متاحة عبر جميع النطاقات الفرعية (وليس فقط www) ، لذلك إذا كنت لا تثق في جميع المجالات الفرعية التي قد لا تعمل من أجلك.
  • سيتم إرسال البيانات إلى الخادم على كل طلب. ليس رائعًا ، ولكن اعتمادًا على السيناريو الخاص بك ، ربما لا يزال أقل من العمل من حل IFrame/postmessage.
  • إذا كنت تفعل هذا ، فلماذا لا تستخدم ملفات تعريف الارتباط مباشرة؟ يعتمد على سياقك.
  • حجم ملفات تعريف الارتباط 4K Max ، مجموع جميع ملفات تعريف الارتباط للمجال (بفضل Blake لإشارة ذلك إلى التعليقات)

وأنا أتفق مع المعلقين الآخرين ، يبدو أن هذا يجب أن يكون خيارًا محددًا لـ LocalStorage بحيث لا تكون عمليات العمل غير مطلوبة.

أقترح جعل site.com إعادة توجيه إلى www.site.com لكل من الاتساق وتجنب مشكلات مثل هذه.

أيضًا ، فكر في استخدام حل المتصفح المتقاطع مثل يستمر يمكن أن تستخدم كل المستعرض المتصفح الأصلي.

أنا أستخدم xDlocalStorage ، هذه مكتبة JS خفيفة الوزن تقوم بتنفيذ واجهة LocalStorage ودعم تخزين المجال المتقاطع باستخدام اتصال رسالة Iframe. (دعم AngularJS)

https://github.com/ofirdagan/cross-domain-local storage

هذه هي الطريقة التي حللت بها لموقع الويب الخاص بي. قمت بإعادة توجيه جميع الصفحات دون www إلى www.site.com. وبهذه الطريقة ، سوف يستغرق الأمر دائمًا LocalStorage من www.site.com

أضف ما يلي إلى الخاص بك .htacess, ، (قم بإنشاء واحدة إذا لم يكن لديك بالفعل) في دليل الجذر

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

يمكنك فقط استخدام document.domain منشأه. إذا وضعت هذا في الإجراءات الأولى من JavaScript:

document.domain="mysite.com";
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top