لماذا يتم حلق طلب HTTP هذا باستمرار؟
سؤال
ربما أطل شيئا واضحا هنا.
التعليقات هي للمساعدة في شرح أي رمز محددة مكتبة.
public function areCookiesEnabled() {
$random = 'cx67ds';
// set cookie
cookie::set('test_cookie', $random);
// try and get cookie, if not set to false
$testCookie = cookie::get('test_cookie', false);
$cookiesAppend = '?cookies=false';
// were we able to get the cookie equal ?
$cookiesEnabled = ($testCookie === $random);
// if $_GET['cookies'] === false , etc try and remove $_GET portion
if ($this->input->get('cookies', false) === 'false' AND $cookiesEnabled) {
url::redirect(str_replace($cookiesAppend, '', url::current())); // redirect
return false;
}
// all else fails, add a $_GET[]
if ( ! $cookiesEnabled) {
url::redirect(url::current().$cookiesAppend);
}
return $cookiesEnabled;
}
أولا، أردت طريقة سهلة للتحقق مما إذا تم تمكين ملفات تعريف الارتباط. لقد حققت هذا، ولكن في حالة عدم وجود ملفات تعريف الارتباط، كان هناك قبيح ?cookies=false
في عنوان URL.
كان ذلك جيدا، ولكن بعد ذلك إذا قمت بإعادة تحميل الصفحة وتم تمكين ملفات تعريف الارتباط مرة أخرى، أردت إعادة توجيه المستخدم، بحيث جردت ?cookies=false
في عنوان URL (السماح للطريقة بإعادة فحص وتعلم أن ملفات تعريف الارتباط الآن نكون ممكن.).
المحلول
بعد $cookiesEnabled = ($testCookie === $random);
, ، هناك 4 حالات:
$cookiesEnabled
صحيح و$_GET['cookies'] === 'false'
صحيح$cookiesEnabled
صحيح و$_GET['cookies'] === 'false'
هو زائف$cookiesEnabled
هو خطأ و$_GET['cookies'] === 'false'
صحيح$cookiesEnabled
هو خطأ و$_GET['cookies'] === 'false'
هو زائف
يتم التعامل مع القضية 1 من قبل الأول if
منع. ال return
يهدف البيان إلى التعامل مع الحالات 2 و 3؛ الثاني if
تهدف كتلة إلى التعامل مع الحالة الرابعة فقط، لكنها تصطاد كل من الحالة 3 و 4. في حالة 3، يكون عنوان URL بالفعل ?cookies=false
, ، لكن منذ $cookiesEnabled
هو خطأ، ونحن إعادة توجيه لإضافة ?cookies=false
, ، والاستنتاج مرة أخرى في حالة 3.
نصائح أخرى
يجب أن تغادر شيئا ما منذ هناك هو لا حلقة في هذا الرمز. إذا كنت تقصد أن متصفح هو الحلقات (على سبيل المثال الحصول على إعادة توجيهات مستمرة)، ثم أوصي بتثبيت رؤوس Live HTTP. تمديد لفيرفوكس ومشاهدة ما تقوله المتصفح والخادم لبعضهما البعض. قد يؤدي وضع بعض رمز التسجيل في المقتطف أعلاه إلى مفيد أيضا.
تحديث للتعليق:
ثم أوصي حقا بوضع بيانات الطباعة داخل if
S حتى تتمكن من رؤية أي منها التي تمر بها وما هي القيم المختلفة. بوضوح شيئا ما لا يتمتع بالطريقة التي اعتقدت أنها ستكون، لذلك تحتاج الآن لمعرفة ما هو في الواقع.
شيء واحد قد واجهته عدة مرات هو أن الكود نفسه على ما يرام، ولكن هناك ملف .htaccess يعمل ضدك، لذلك انتقل إلى التحقق من أي ملفات .htaccess في أي من الدلائل، بدءا من document_root.