PDA

View Full Version : سوال در مورد session و ریدایرکت



Master_Power
چهارشنبه 24 تیر 1394, 09:05 صبح
سلام
یه فرم ورود دارم که همه چیزش کار میکنه ولی وقتی که آدرس پنل کاربر را مستقیم تایپ میکنم میره تو پنل و تمام رکورد های بانک را نشون میده

مشکل از session هست که وقتی ساخته نشده صفحه را به فرم ورود ریدارکت نمیکنه و جلوگیری از ورود به پنل نمیکنه
یه نکته : session_start توی فایل headers.php ساخته شده
ولی موندم چجوری بنویسم که این مشکل حل بشه
لطفا کمک کنید
این کدهای صفحه فرم ورود هست index.php

<?php include(dirname(__FILE__).'/../headers.php');?>
<div class="row" style="background-color:#f1f1f1; border-radius:5px; border:1px solid #999999; margin-bottom:2%; padding:1.5%;">
<script type="text/javascript" src="<?php echo url; ?>/js/jquery.min.js"></script>
<script type="text/javascript" src="<?php echo url; ?>/js/login.js"></script>
<div class="col-lg-4 col-lg-offset-4">
<div class="panel panel-default">
<div class="panel-heading" style="text-align:center">ورود به پنل کاربری</div>
<div class="panel-body">
<img src="img/photo_login.png" class="img-circle img-responsive center-block" style="margin-bottom:5%">
<form method="post" action="" id="login-form">
<!-- %%%%%%%%%%%%%%%%%%%%% -->
<div class="row">
<div class="form-group">
<div class="col-lg-12" style="margin-bottom:2%">
<input type="text" name="username" placeholder="نام کاربری" id="username" class="user-field form-control">
</div>
</div>
</div>
<!-- %%%%%%%%%%%%%%%%%%%%% -->
<!-- %%%%%%%%%%%%%%%%%%%%% -->
<div class="row">
<div class="form-group">
<div class="col-lg-12" style="margin-bottom:2%">
<input type="text" name="password" id="password" placeholder="پسورد" class="pass-field form-control">
</div>
</div>
</div>
<!-- %%%%%%%%%%%%%%%%%%%%% -->

<input type="button" value="ورود" class="login_btn btn btn-success btn-block"/>
<div class="loading" style="text-align:center">
<img src="files/icons/loading.gif"/>
</div><br>
<div id="message_login" style="text-align:center">

</div>

</form></div> <div class="panel-footer" style="text-align:center"><a href="<?php echo url; ?>/submit">برای عضویت اینجا کلیک کنید</a></div>
</div>
</div>

</div><!-- // row -->

<?php include(dirname(__FILE__).'/../footer.php');?>

اینم کد قسمت خوندن از بانک و ساخت session هست login.php

<?php
session_start();
require('../config.php');
require('include/function.php');

if(isset($_POST['username']) and (isset($_POST['password'])))
{
$username=$_POST['username'];
$username=stripslashes($username);
$username= mysql_real_escape_string($username);
$password=$_POST['password'];
$password=stripslashes($password);
$password=mysql_real_escape_string($password);

$sql="SELECT kj_username,kj_password FROM kj_info WHERE kj_username='".$username."' and kj_password='".$password."'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

if($result and mysql_num_rows($result)>0)
{


display_message ('yes');
$_SESSION['user']=$username;
}
else
{
display_message ('Accsess Denies');
header('location:index.php');
}
}
?>
خب وقتی که کاربر وارد میشه، میره تو صفحه panel.php که اطلاعاتش هست

ولی مشکل اینجاست که وقتی ما آدرس را مستقیم اینجوری مینویسیم http://localhost/acount/panel.php هم باز میره
در صورتی که باید با دستور location که گذاشتم ریدایرکت کنه رو صفحه فرم ورود index.php که نمیشه

لطفا راهنمایی کنید
راستی اینم فایل function.php

<?php
/********************************/
function display_message($txt)
{
echo $txt;
}
/********************************/
function redire()
{
header('location:index.php');
}
/*******************************/
function check_user()
{
if(!isset($_SESSION['user']))
{
redire();
}
}
/********************************/
function filter_input_txt($txt_input)
{
stripslashes($txt_input);
mysql_real_escape_string($txt_input);
}

?>

thacker
چهارشنبه 24 تیر 1394, 12:55 عصر
تابع check_user() رو توی صفحه فراخوانی کنید...

Master_Power
چهارشنبه 24 تیر 1394, 16:25 عصر
تابع check_user() رو توی صفحه فراخوانی کنید...
سلام
کجا باید بزارم ؟؟

ظاهرا از توابع PHP نیست

thacker
چهارشنبه 24 تیر 1394, 17:29 عصر
این رو باید اول صفحه panel.php وارد کنید...
از توابع php که نیست ... خودتون این تابع رو توی functuin.php تعریف کردید دیگه ...

Master_Power
چهارشنبه 24 تیر 1394, 19:01 عصر
این رو باید اول صفحه panel.php وارد کنید...
از توابع php که نیست ... خودتون این تابع رو توی functuin.php تعریف کردید دیگه ...

سلام دوباره

من دستور را به این صورت اول فایل panel.php نوشتم

if(!isset($_SESSION['user']))
{
check_user();
}
خب وقتی مینویسم خطای header already send میده

خب دستور header توی 2 تا فایل دارم
این کد header تو فایل login.php

$sql="SELECT kj_username,kj_password FROM kj_info WHERE kj_username='".$username."' and kj_password='".$password."'";
$result=mysql_query($sql);
$row=mysql_fetch_array($result);

if($result and mysql_num_rows($result)>0)
{


display_message ('yes');
$_SESSION['user']=$username;
}
else
{
redire();
display_message ('Accsess Denies');
header('location:index.php');
}
}
اینم کد header توی function.php

function redire()
{
header('location:index.php');
}
/*******************************/
function check_user()
{
if(!isset($_SESSION['user']))
{
redire();
}
}
خب حالا چجوری اصلاح کنیم که خطا نده ؟

در ضمن با اینکه دستور chech_user() را میزارم بازم وقتی ادرس صفحه panel.php را مستقیم میزنم خودش میره تو پنل

اگه کد فرم ورود سالم و بی دردسر دارید لطفا بزارید به صورت فایل zip
تشکر

Master_Power
چهارشنبه 24 تیر 1394, 23:00 عصر
آقا درست کردم
مشکل حل شد
فقط یه چیزی

توی پوشه account من چندتا فایل دارم که مثلا یکیشون menu.php هست

خب من اومدم check_user را تو panel.php گذاشتم و header را هم درست کردم
ولی وقتی همین check_user را تو menu.php میزارم اون موقع پنل کاربری این خطا را میده

Fatal error: Cannot redeclare display_message() (previously declared in C:\xampp\htdocs\account\include\function.php:3) in C:\xampp\htdocs\account\include\function.php on line 6

لطفا راهنمایی کنید

H:Shojaei
پنج شنبه 25 تیر 1394, 00:24 صبح
احتمالا توی فایلها، فایل funcition.php رو دوبار include کردین... واسه رفع مشکل از include_once استفاده کنید...

Master_Power
پنج شنبه 25 تیر 1394, 00:30 صبح
حالا یه مشکل دیگه

رو سرور که میبرم و آدرس را به انصورت میزنم http://xxxxxx.com/account/panel.php میره تو اکانت . در صورتی که نباید اینطور باشه و ریدایرکت بشه رو index.php

رو لوکال درسته ولی رو سرور خرابه

خدااااااااااااااااااااا

این خطا را رو سرور میده


[15-Jul-2015 20:51:10 UTC] PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/xxxxxx/public_html/demo505010/kardan/account/panel.php:1) in /home/xxxxxx/public_html/demo505010/kardan/account/header.php on line 2
[15-Jul-2015 20:51:10 UTC] PHP Warning: Cannot modify header information - headers already sent by (output started at /home/xxxxxx/public_html/demo505010/kardan/account/panel.php:1) in /home/xxxxxx/public_html/demo505010/kardan/account/include/function.php on line 10
[15-Jul-2015 20:51:26 UTC] PHP Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at /home/xxxxxx/public_html/demo505010/kardan/account/panel.php:1) in /home/xxxxxx/public_html/demo505010/kardan/account/header.php on line 2