الحصول على إعداد ملفات تعريف الارتباط في مختلف المجالات، مع جافا سكريبت أو غيرها

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

  •  03-07-2019
  •  | 
  •  

سؤال

هل لم تكن قادرة على العثور على أي شيء خاص لهذا الوضع على الانترنت حتى هنا أذهب ... ولست بحاجة لمجموعة / الحصول على الكوكيز المخزنة في "first.com" أثناء تصفح "second.com" لدي الوصول الكامل من "first.com" ولكن لدي جافا سكريبت الوصول فقط (يمكن التلاعب DOM كما أريد) على " second.com ".

وكان لقائي الاول النهج لخلق iframe على second.com (مع شبيبة) التي حملت صفحة مثل "first.com/doAjax؟setCookie=xxx" والتي لم مكالمة اياكس الى القول "first.com/setCookie؟ cookieData = XXX "التي من شأنها أن تعيين ملف تعريف الارتباط في" first.com "مع البيانات التي مرت حولها.

وهذا يعمل الى حد كبير غرامة لوضع ملف تعريف الارتباط على first.com من second.com - للحصول على الكعكة تابعت في الأساس نفس الإجراء، خلق إطار iframe التي حملت "first.com/doAjax؟getCookie" والتي من شأنها أن تفعل مكالمة اياكس ليقول "first.com/getCookie" التي من شأنها أن قراءة المعلومات الكعكة على first.com وإعادته ككائن JSON.

والمشكلة هي أنني غير قادر على تحقيق ذلك الكائن JSON الكعكة مرة أخرى إلى "second.com" حتى أتمكن من قراءته، وأيضا ربما أنا فقط يمكن تحقيق ذلك عندما الدعوة اياكس كاملة باستخدام "window.top" ولكن هناك مشاكل التوقيت لأن ليست نسبة إلى عندما تم تحميل IFRAME. أرجو أن أكون واضحا وأتساءل عما إذا كان هناك حل أسهل بدلا من هذا مجنون iframe-> اياكس حماقة، ويبدو أيضا أن مثل هذا لن تعمل حتى للحصول على ملفات تعريف الارتباط في SAFARI.

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

المحلول

هل يمكن حقن عنصرا النصي في الرأس وثيقة مع الاستدعاء الذي يمر الكعكة تحتاج إلى أي وظيفة يحتاج إليها.

وشيء من هذا القبيل:

 <script type="text/javascript">
   var newfile=document.createElement('script');
   newfile.setAttribute("type","text/javascript");
   newfile.setAttribute("src", 'http://first.com/doAjax?getCookie&callback=passCookie');
   document.getElementsByTagName("head")[0].appendChild(newfile);
 </script>

وعلى first.com/doAjax؟getCookie الصفحة يمكن القيام بذلك:

     passCookie({'name':'mycookie', 'value':'myvalue'});

نصائح أخرى

ووضع هذا PHP-ملف لfirst.com:

//readcookie.php    
echo $_COOKIE['cookiename'];

في second.com يمكنك استخدام هذا جافا سكريبت للحصول على قيمة:

function readCookieCallback()
{
   if ((this.readyState == 4) && (this.status == 200))
   {
     alert("the value of the cookie is: "+this.responseText);
   } 
   else if ((this.readyState == 4) && (this.status != 200))
   {
     //error...
   }
}


function buttonClickOrAnything()
{
  var refreshObject = new XMLHttpRequest();
  if (!refreshObject)
  {
    //IE6 or older
    try
    {
      refreshObject = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        refreshObject = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        return;
      }
    }
  }
  refreshObject.onreadystatechange = readCookieCallback;
  refreshObject.open("GET", "http://www.first.com/readcookie.php");
  refreshObject.send();
}

والتحيات، روبرت

لتخزين ملفات تعريف الارتباط يمكنك تغيير مخطوطتي كما يلي:

ووPHP-سيناريو جديد:

//writecookie.php
setcookie($_GET['c'], $_GET['v']);

وجافا سكريبت:

function buttonClickOrAnything()
{
  var refreshObject = new XMLHttpRequest();
  if (!refreshObject)
  {
    //IE6 or older
    try
    {
      refreshObject = new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        refreshObject = new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        return;
      }
    }
  }
  refreshObject.open("GET", "http://www.first.com/writecookie.php?c=cookiename&v=cookievalue");
  refreshObject.send();
}

وهذا يجب أن تعمل على جميع المتصفحات.

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