كيف يمكنني تسجيل الدخول إلى موقع بعيد باستخدام PHP cURL، ثم إعادة التوجيه إلى ذلك الموقع

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

  •  01-10-2019
  •  | 
  •  

سؤال

لقد رأيت هذا السؤال بعدة طرق ولكن لا يمكنني العثور على إجابة فعالة.

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

شكرًا،

علامة

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

المحلول

لا عجب أنك لا تستطيع العثور على إجابة تعمل.
هذا مستحيل.

نصائح أخرى

تكمن المشكلة في أن تسجيل الدخول سيأتي من خادم PHP الخاص بك، وليس من عنوان IP الخاص بالمستخدم النهائي، لذا عند إعادة توجيه المستخدم، فمن المحتمل ألا يراه الموقع أثناء تسجيل الدخول.

يمكنك تعيين أشياء مثل تمرير ملف تعريف الارتباط المقدم لتسجيل الدخول إلى خادم PHP مرة أخرى إلى المستخدم النهائي، ولكن إذا كان الموقع المعاد توجيهه مكتوبًا جيدًا ولو قليلاً، فلن يقع في هذا الخطأ.

إذا كان لديك سيطرة كاملة على كلا الموقعين ويمكنهما الوصول إلى قواعد بيانات كل منهما، فيمكنك كتابة بعض التعليمات البرمجية الخلفية حتى يخبر خادم PHP موقع .net بتوقع المستخدم الوارد؛التي يمكن أن تعمل.لكنك ستحتاج إلى القيام ببعض الأعمال الخلفية في كلا النظامين.

إذا لم يكن لديك وصول خلفي إلى موقع .Net، فإن الطريقة الوحيدة التي يمكنني رؤيتها للقيام بذلك هي استخدام موقع PHP كوكيل كامل لموقع .Net - أي بدلاً من القيام بإعادة التوجيه ما عليك سوى عرض مخرجات موقع .net مباشرةً عبر PHP.سيكون لهذا جميع أنواع المشاكل الأخرى المرتبطة به بالرغم من ذلك.

إذا كان الموقع يستخدم ملفات تعريف الارتباط ، فيمكنك استخدام حليقة.

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, "User=$user&passwd=$passwd");
curl_setopt ($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);

$header = curl_exec($ch);

if (preg_match("/set-cookie:(.*)\n", $header, $m)) {
  $cookies = preg_replace('/(expires|path|domain)=[^;]*;?/i', '', $m[1]);
  header("Cookies: " . $cookies);
  header("Location: $url");
}

هذا يجب أن ينجح لكنني لا أختبره.

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