PDA

View Full Version : سوال: چرا نمی تونم موقع ریدایرکت کردن یه صفحه، مقدار HTTP_REFERER رو بدست بیارم؟



idocsidocs
پنج شنبه 27 بهمن 1390, 18:04 عصر
چرا نمی تونم موقع ریدایرکت کردن یه صفحه، مقدار HTTP_REFERER رو بدست بیارم؟

MMSHFE
پنج شنبه 27 بهمن 1390, 18:08 عصر
تا جایی که میدونم، ریدایرکت Referer رو نمیفرسته چون این عمل، اصلاً Refer نیست!

idocsidocs
پنج شنبه 27 بهمن 1390, 18:29 عصر
تا جایی که میدونم، ریدایرکت Referer رو نمیفرسته چون این عمل، اصلاً Refer نیست!

خب چطور باید این مقدار رو بدست بیارم؟ مقدار جایگیزینی وجود نداره؟

MMSHFE
پنج شنبه 27 بهمن 1390, 18:58 عصر
بعد از Redirect توی صفحه مقصد SERVER_$ رو print_r کنید ببینید توی کدوم مؤلفه صفحه قبلی رو میشه پیدا کرد.

idocsidocs
جمعه 28 بهمن 1390, 01:43 صبح
بعد از Redirect توی صفحه مقصد SERVER_$ رو print_r کنید ببینید توی کدوم مؤلفه صفحه قبلی رو میشه پیدا کرد.

فکر نکنم بشه با بقیه موارد کار کرد. شما تا حالا چنین موردی براتون پیش نیومده؟

MMSHFE
جمعه 28 بهمن 1390, 09:53 صبح
راستش نه چون وقتی Redirect میکنم میدونم از چه صفحه ای به این صفحه منتقل شدم. میتونید بجای Redirect خود PHP از تگ متا برای منتقل شدن استفاده کنید. ببینید این روش جواب میده یا نه؟

idocsidocs
جمعه 28 بهمن 1390, 12:46 عصر
راستش نه چون وقتی Redirect میکنم میدونم از چه صفحه ای به این صفحه منتقل شدم.
چطور می تونید متوجه بشید که از چه صفحه ای ریدایرکت شدید؟ مثلا کاربر از سایت logout می کنه. از کجا متوجه می شید که از چه صفحه ای منتقل شده؟

MMSHFE
جمعه 28 بهمن 1390, 15:42 عصر
خوب همون صفحه ای که روی لینک logout کلیک کرده، وقتی به logout.php منتقل میشه، بعنوان Referer مشخص میشه و میشه دوباره به همون صفحه ریدایرکت کرد.

idocsidocs
جمعه 28 بهمن 1390, 17:08 عصر
خوب همون صفحه ای که روی لینک logout کلیک کرده، وقتی به logout.php منتقل میشه، بعنوان Referer مشخص میشه و میشه دوباره به همون صفحه ریدایرکت کرد.

فرض کنید تاریخ اعتبار سسشن گذشته و توی صفحه ویرایش فایل هستیم. در این صورت وقتی دکمه ثبت تغییرات رو کلیک می کنم به دلیل اینکه سسشن ها حذف شدن کاربر به صفحه لاگین ریدایرکت می شه ولی مقداری برای ریفر بدست نمی یاد.

کلا موقع ریدارکت کردن مقداری برای ریفر ذخیره نمی شه.

MMSHFE
جمعه 28 بهمن 1390, 23:29 عصر
خوب شما توی همون صفحه ای میخواین ریدایرکت رو انجام بدین (توی مثال خودتون صفحه ثبت تغییرات)، Referer رو قبل از Redirectکردن دریافت کنید و برای صفحه لاگین بفرستین. مثال:


if(!isset($_SESSION['user'])) {
header('Location: login.php'.(isset($_SERVER['HTTP_REFERER']) ? '?target='.$_SERVER['HTTP_REFERER'] : ''));
exit();
}

توی فرم لاگین هم چک کنید اگه ['GET['target_$ ست شده بود، اون رو توی فرم بصورت تگ مخفی بگذارین تا توی صفحه مقصد فرم بعد از پردازش اطلاعات، کاربر به اون صفحه هدایت بشه.
موفق باشید.