لماذا يتسبب Session_start في مهلة عندما يقوم أحد البرمجيات باستدعاء برنامج نصي آخر باستخدام حليقة

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

  •  05-07-2019
  •  | 
  •  

سؤال

لديّ نصتان PHP ، كلاهما باستخدام الجلسة نفسها عن طريق الاتصال session_name('MySessID').

عندما يقوم البرنامج النصي الأول باستدعاء البرنامج النصي الثاني باستخدام Curl ، يتم تعليق البرنامج النصي الثاني عندما session_start() يسمى.

لماذا هذا سعيد؟

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

المحلول 2

أنا لا أفهم تمامًا سبب حدوث ذلك ، لكنني حصلت عليه.

هذه حشرة يصف نفس المشكلة التي أواجهها. لديّ نصوص تنشر إلى نص آخر ، كلاهما يستخدم نفس الجلسة, ، والتي يبدو أن PHP.

لذلك ، قبل أن أفعل البرنامج النصي بعد حليقة ، أسمي session_commit وظيفة ، لذا إنهاء جلسة نصوص الاتصال ، وتمكين البرنامج النصي المتصل بإعادة تشغيل الجلسة.

اجتز...

نصائح أخرى

من دليل PHP

http://php.net/manual/en/function.session-write close.php

عادةً ما يتم تخزين بيانات الجلسة بعد إنهاء البرنامج النصي دون الحاجة إلى الاتصال بالاتصال _write_close () ، ولكن نظرًا لأن بيانات الجلسة مقفلة لمنع كتابة كتاب واحد فقط قد يعمل في جلسة في أي وقت. عند استخدام Framesets مع الجلسات ، ستختبر الإطارات التي تقوم بتحميل واحدة تلو الأخرى بسبب هذا القفل. يمكنك تقليل الوقت اللازم لتحميل جميع الإطارات عن طريق إنهاء الجلسة بمجرد إجراء جميع التغييرات على متغيرات الجلسة.

لذلك لا يمكنك الحصول على نصيتين تستخدم نفس الجلسة في نفس الوقت.

لقد تعرضت للعض من هذا أيضًا. لقد أصلحت ذلك بفضل المعلومات المقدمة في Stackoverflow.

كان لدي صفحتان ، وكلاهما كان لديه "Session_start ()" في الأعلى والأول كان يتصل بالثاني مع حليقة حتى أتمكن من نشر المتغيرات إلى البرنامج النصي الثاني بعد التحقق من الصحة. كان خادم الويب معلقًا حتى أضفت "session_write_close ()".

عينة الكود يتبع:

// IMPORTANT (OR ELSE INFINITE LOOP) - close current sessions or the next page will wait FOREVER for a write lock.
session_write_close();

// We can't use GET because we can't display the password in the URL.
$host = $_SERVER['HTTP_HOST'];
$uri  = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$url  = "http://$host$uri/formPage2.php?";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); //append URL
curl_setopt($ch, CURLOPT_POST,TRUE);//We are using method POST
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($_REQUEST, '', "&"));//append parameters    

curl_exec($ch); // results will be outputted to the browser directly
curl_close($ch);
exit();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top