PDA

View Full Version : redirect نشدن بعد از لاگین



mostafa272
جمعه 08 اردیبهشت 1391, 19:14 عصر
با سلام

در برنامه CMS ام در صفحه لاگین از captcha استفاده می کرد که من دو خط مربوط به فراخوانی توابعی که صحت اون رو چک می کرد حذف کردم (چون نیازی به اون ندارم) اما بعد از موفقیت لاگین و پس از نمایش پیغام باید به صفحه index ریدایرکت کنه ولی بعد از اون کاری صورت نمیده!نمی دونم اشکال از چیه!کد صفحه ای که توابع مربوط به redirect و بقیه توابع کنترلی هست اینه:


<?php
require 'basics.php';
$url='/';
$err=0;
function login_redirect($url,$msg='success'){
if($msg)$url.='?login_msg='.$msg;
header('Location: '.$url);
echo '<a href="'.htmlspecialchars($url).'">redirect</a>';
exit;
}
// set up the redirect
if(isset($_REQUEST['redirect'])){
$url=preg_replace('/[\?\&].*/','',$_REQUEST['redirect']);
if($url=='')$url='/';
}
// check that the email address is provided and valid
function login_check_is_email_provided(){
if(
!isset($_REQUEST['email']) || $_REQUEST['email']==''
|| !filter_var($_REQUEST['email'], FILTER_VALIDATE_EMAIL) ){
login_redirect($GLOBALS['url'],'noemail');
}
}
// check that the captcha is provided
function login_check_is_captcha_provided(){
if(
!isset($_REQUEST["recaptcha_challenge_field"]) || $_REQUEST["recaptcha_challenge_field"]==''
|| !isset($_REQUEST["recaptcha_response_field"]) || $_REQUEST["recaptcha_response_field"]==''){
login_redirect($GLOBALS['url'],'nocaptcha');
}
}
// check that the captcha is valid
function login_check_is_captcha_valid(){
require 'recaptcha.php';
$resp=recaptcha_check_answer(
RECAPTCHA_PRIVATE,
$_SERVER["REMOTE_ADDR"],
$_REQUEST["recaptcha_challenge_field"],
$_REQUEST["recaptcha_response_field"]
);
if(!$resp->is_valid){
login_redirect($GLOBALS['url'],'invalidcaptcha');
}
}

djsaeedkhan
جمعه 08 اردیبهشت 1391, 20:15 عصر
سلام
هم می تونی برای ریدایرکت از جاوا اسکریپت انجام بدی مثل همین کاری که در همین فروم موقع لوگین انجام میشه
ولی این تصحیح کد رو انجام بده
شاااااید

header('Location:$url');

reza10wert
جمعه 08 اردیبهشت 1391, 21:08 عصر
دوست عزیز
اول صفحه قبل از هر دستوری اینو بذار
ob_start(); در انتهای صفحه هم اینو بذار
ob_end_flush();
موفق باشید

mostafa272
دوشنبه 11 اردیبهشت 1391, 09:36 صبح
آقا با این کارها هم درست نشد!!! کدها رو ضمیمه کردم . لطفا یه نگاه بندازید :


http://uplod.ir/15uvbq254fxg/my_CMS.rar.htm

reza10wert
دوشنبه 11 اردیبهشت 1391, 09:46 صبح
دوست عزیز این CMS خیلی مشکل داره

1- داخل خیلی از صفحات تگ PHP و HTML باز شده و دیگه بسته نشده
2- شما میخواهید داخل کدوم صفحه عمل ریدایرکت انجام بشه ؟

mostafa272
دوشنبه 11 اردیبهشت 1391, 11:37 صبح
تو آموزش این CMS گفته که تگ های php رو نمی بنده!بعدشم موقع login فایل login.php از پوشه ww.incs فراخوانی میشه که توابعی رو از یه فایل دیگه به اسم login-lib.php فراخوانی میکنه (توابعی هستند برای چک کردن ورودی های لاگین) بعد موقع لاگین اگر همه چیز درست بود با تابع login_redirect عمل لاگین رو انجام می دهد(منتها در عمل این گونه نمی شود پیغام "login successfull" به نمایش در می آید حتی url هم به message=success تغییر میکند ولی ریدارکتی صورت نمی گیرد به فایل index داخل فولدر ww.admin. l مشکل اینجاست!)

Hamid.RDN
دوشنبه 11 اردیبهشت 1391, 11:49 صبح
دوست عزیز. چند نکته رو خاطر نشان کنم

۱- برای redirect کردن باید قبل از تابع header هیچ خروجی (حتی فاصله) به مرورگر ارسال نشده باشد.
۲- بعد از header هم هیچ چیزی به خروجی ارسال نشه (مشکل در تفسیر نامناسب)

در رابطه با نبستن تگهای PHP هم باید گفت اینکار به خاطر جلوگیری از ارسال اطلاعات ناخواسته به خروجی صورت میگیره.

goodboybad
دوشنبه 17 مهر 1391, 00:54 صبح
با توضیحاتی که فرمودید نکته های دوست عزیز hamid.rdn کاملا صحیح میباشد و مشکل از آن است