معنى - redirect php




لماذا يتعين علي استدعاء "الخروج" بعد إعادة التوجيه من خلال العنوان("الموقع..") في PHP؟ (4)

هل يمكن تنفيذ الشفرة بعد استدعاء موقع الرأس بشكل فعال؟

نعم دائما. لا يمثل header سوى سطر بيانات يطلب من المتصفح إعادة التوجيه. سيظل PHP باقي الصفحة وسيُطلع عليها العميل ببساطة عن طريق منع تنفيذ أمر header .

هذا أمر سهل بما فيه الكفاية مع عميل سطر الأوامر مثل wget ، على سبيل المثال ، بمجرد إخباره بعدم اتباع عمليات إعادة التوجيه.

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

أنت تعلم أنه إذا كنت تريد إعادة توجيه مستخدم في PHP ، فيمكنك استخدام وظيفة الرأس:

header('Location: http://smowhere.com');

كما أنه من المعروف جيدا أنه من الممارسات الجيدة وضع exit; أيضا exit; بعد استدعاء header ، لمنع تنفيذ php code أخرى. لذا ، فإن سؤالي هو: هل يمكن تنفيذ الشفرة بعد استدعاء الموقع الرئيسي؟ في أي الحالات؟ هل يمكن لمستخدم ضار أن يتجاهل اتصال header('Location..') ؟ ماذا؟


إذا قمت بإعادة التوجيه ولكنك لا die() / exit() يتم دائماً تنفيذ التعليمات البرمجية وعرضها .

خذ المثال التالي:

admin.php:

if (authenticationFails)
{
    // redirect and don't die
}

// show admin stuff

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


سيتم تشغيل PHP Code بعد رأس (). في بعض الأحيان ، هذا مطلوب ، كما يظهر example على php.net. للتأكد من عدم وجوده ، يمكنك إنهاء تدفق البرنامج بالكامل.


يرشد header() PHP أنه يجب إرسال رأس HTTP ... عندما يتم إرسال رؤوس HTTP.

ولا يتم إرسالها على الفور عند كتابة المكالمة إلى header () ، ولكن عندما يحين وقت إرسالها (عادة ، عندما تحتاج PHP لبدء إرسال نص الاستجابة - والذي قد يكون متأخرا أكثر مما تعتقد ، عندما يكون output_buffering enabed) .

لذا ، إذا كنت تتصل header() ، فستكون هناك ضمانات شافية بأن الرمز المكتوب بعد هذا البيان لن يتم تنفيذه - ما لم تدل على أنه لا يجب ، باستخدام exit / die .

يمكن للمستخدم تجاهل عنوان Location إذا أراد ؛ ولكن لن يغير أي شيء على حقيقة أن الشفرة بعد استدعاء header() قد يتم أو لا يمكن تنفيذها: هذه المسألة من جانب الخادم.





location