سؤال

وأنا خلق موقع على شبكة الانترنت وعلى صفحة واحدة معينة، أنا يريد أن يرسل المستخدم إلى الصفحة السابقة. أنا جديدة إلى حد ما PHP / HTML وتم استخدام بعض التعليمات البرمجية الموجودة للأفكار والمساعدة.

والتعليمات البرمجية الموجودة يستخدم الأسلوب التالي:

if (! empty($HTTP_REFERER)) 
{
    header("Location: $HTTP_REFERER");
} else 
{
    header("Location: $CFG->wwwroot");
}

ومع ذلك، عند استخدام هذا الرمز يتم التعامل مع HTTP_REFERER كما هو الحال دائما فارغة والمستخدم توجيهك إلى صفحة الجذر. أي عيوب واضحة في هذا الرمز؟

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

المحلول

وتحتاج إلى استخدام:

$_SERVER['HTTP_REFERER']

نصائح أخرى

ولا تعتمد على المرجع HTTP كونه حقل صحيح أو حتى غير فارغة. يمكن أن يختار الناس ليست لديها هذه المجموعة مغادرة أي شيكات لهذا المتغير الذهاب الى الجانب الفارغ من شرط IF-ELSE.

ويمكنك وقاية من هذه عن طريق إرسال طول المعلمة سواء في URL أو معلمات وظيفة من شأنه أن يعقد قيمة التي يمكنك استخدامها لإعادة توجيه المستخدم إلى.

وisset ($ _ SERVER [ 'HTTP_REFERER'])؟ $ _SERVER [ 'HTTP_REFERER']: ''؛

إذا أردت إرسال شخص للعودة إلى الصفحة السابقة، وأنها تعمل بصرف النظر عن المرجعية التي يجري وضعها بشكل صحيح، يمكنك إلحاق المعلمة GET إلى URL (أو POST) .. سوف تحتاج إلى ترميز URL. . شيء من هذا القبيل

<وأ href = "http://www.domain.com.au/script.php؟return=http٪3a٪2f٪2fwww.domain.com.au٪2fthis-is-where-i-was٪ 2F "يختلط =" noreferrer نوفولو "> http://www.domain.com.au/script.php؟return=http٪3a٪2f٪2fwww.domain.com.au٪2fthis-is-where-i-was ٪ 2F

ويمكنك استخدام وظيفة urlencode() PHP ل.

لاحظ أيضا أن رأس المحيل قد تكون فارغة أو مفقودة على أي حال، لذلك يجب أن لا تعتمد على ذلك على الإطلاق ..

ويجب عليك استخدام

$_SERVER['HTTP_REFERER']

ولكن ننظر في تكوين register_globals في ملف php.ini، ينبغي إيقاف لأسباب أمنية. يمكنك قراءة المزيد عن PHP دليل الموقع .

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