PDA

View Full Version : مشکل header در php



Izadshahri
سه شنبه 28 آبان 1392, 11:16 صبح
امروز توی یه پروژه با تابع (http://www.phptik.com/tag/%d8%aa%d8%a7%d8%a8%d8%b9/) header به مشکل بر خوردم, که این تابع (http://www.phptik.com/tag/%d8%aa%d8%a7%d8%a8%d8%b9/) کار نمی کرد, البته مشکل که نمیشد گفت چون قبلا هم برام پیش اومده بود و برای همین لازم دونستم که تجربیاتمو برای تازه کاران (البته خودم هم حرفه ای نیستم http://www.phptik.com/wp-includes/images/smilies/icon_biggrin.gif ) به اشتراک بزارم,
شما توی کد پروژتون یه چنین تابعی دارید :

header(“Location: contact-thanks.php”); حالا به دلایلی این تابع کار نمی کنه و صفحه رو به صفحه مورد نظرتون به اصطلاح ریدایرکت نمی کنه!
اولین و مهم ترین نکته اینه که قبل از اجرای این کد شما نباید خروجی مثل Echo داشته باشید که header ارسال کنه! چون header فقط یک بار ارسال میشه و طبیعتا header دوم ارسال نمیشه,
مثل کد زیر :

echo’Hello Phptik.com’;
header(“Location: contact-thanks.php”); خوب شما نباید توقع داشته باشید کد شما صحیح کار کنه! مسئله بعدی session هاست که من خیلی باهاشون سر وکله زدم, اگه از session استفاده می کنید بعد از تابع session_start(); حتما از تابع ob_start(); استفاده کنید!
یه خاطره تلخ هم در مورد رعایت یه مسئله امنیتی بگم براتون, من تو یه پروژه ای برای Session صفحه مدیر از headerاستفاده کرده بودم که اگه سشن درست نبود به صفحه خروج ریدایرکت بشه! کاری که همه می کنند,

if(!isset($_SESSION['secret']))
{
header(“location: logout.php”);
……….

(تو پست بعدی یه سری مسائل امنیتی در مورد ورود امنت تر و استفاده همزمان از Session و کوکی هامی نویسم)
خوب طبق بالا اگه کسی مستقیم وارد صفحه مدیر میشد ولی لاگین نکرده بود صفحه منتقل میشد! بعد دیدم یکی از دوستام ایمیل زده می خنده می گه من بدون لاگین وارد صفحه میشم!!
بعد که بررسی کردم دیدم فایل کانفیگ با Notepad ویندوز ویرایش شده بود و غیر استاندارد ذخیره شده بود و به اصطلاح دارای BOM شده بود یعنی خروجی HTML یه کارکتر خالی میفرستاد و این یعنی ارسال header !! برای همین header دوم ارسال نمیشد و هر کسی میتونست تو ادمین واسه خودش دور بزنه راه حلش هم ساده هست استفاده از تابع exit(); !
وقتی ما از تابع headerاستفاده می کنیم یعنی با ادامه کد کاری نداریم پس برنامه رو exit میکنیم که اگه سهوا هیدر ارسال نشد لا اقل دسترس هم نداشته باشند! مثل :

if(!isset($_SESSION['secret']))
{
header(“location: logout.php”);
exit();
… منبع: http://www.phptik.com/%D9%85%D8%B4%DA%A9%D9%84-header-%D8%AF%D8%B1-php/