PDA

View Full Version : مشکل ورود به حساب کاربری در php



abbas3zaar
پنج شنبه 13 اسفند 1394, 16:35 عصر
سلام.

این جدولم ( ستون user_role مشخص کننده نوع کاربر هست)

http://8pic.ir/images/phttbe9mrqqj7v1qsorp.jpg

اینم فرم ورودم:



<form action="includes/login.php" method="post">
<div class="form-group">
<input name="username" type="text" class="form-control" placeholder="نام کاربری">
</div>
<div class="form-group">
<input name="password" type="password" class="form-control" placeholder="رمز عبور">
</div>
<div class="form-group">
<button name="login" class="btn btn-success" type="submit">ورود</button>
</div>


</form>

وقتی فرم بالا submit میشه میره صفحه ی login.php که کل کدهاش اینه:




include "db.php";
session_start();

if(isset($_POST['login'])){
$username = $_POST['username'];
$password = $_POST['password'];

$username = mysqli_real_escape_string($connection, $username);
$password = mysqli_real_escape_string($connection, $password);

$query = "SELECT * FROM users WHERE user_name = '{$username}' ";
$select_user_query = mysqli_query($connection, $query);

if(!$select_user_query) {
die("QUERY FAILED , " . mysqli_error($connection));
}

while($row = mysqli_fetch_array($select_user_query)){
$db_user_id = $row['user_id'];
$db_user_name = $row['user_name'];
$db_user_password = $row['user_password'];
$db_user_firstname = $row['user_firstname'];
$db_user_lastname= $row['user_lastname'];
$db_user_role = $row['user_role'];

}

if($username !== $db_user_name && $password !== $db_user_password){
header("Location: ../index.php");


} else if($username == $db_user_name && $password == $db_user_password) {
$_SESSION['username'] = $db_user_name;
$_SESSION['firstname'] = $db_user_firstname;
$_SESSION['lastname'] = $db_user_lastname;
$_SESSION['user_role'] = $db_user_role;

header("Location: ../admin2");

} else {
header("Location: ../index.php");

}


}



اینجا از دیتابیس اطلاعات رو چک میکنه و همچنین user_role ادمین باشه بره به پانل مدیریت و اگر کاربر معمولی باشه بره به صفحه اول سایت
خب تا اینجا حله و مشکلی نیس
خب، حالا اگر یوزر ali یا hasan میزنم چون user_role ادمین نیس ریدایرکت میشه به index سایت ولی abbas بزنم میره پنل مدیریت و با استفاده از کد زیر:


echo $_SESSION['username'];

پیام زیر ظاهر میشه:

http://8pic.ir/images/cqqdqw1l23bo9nepe0p4.jpg

حالا وقتی خروج رو که میزنیم بر میگرده به صفحه اول سایت با کد صفحه ی زیر:

کدهای logout.php





session_start();

$_SESSION['username'] = null;
$_SESSION['firstname'] = null;
$_SESSION['lastname'] = null;
$_SESSION['user_role'] = null;

header("Location: ../../index.php");



حالا وقتی لاگین نکنی و دستی آدرس پوشه ادمین رو وارد کنی:

http://8pic.ir/images/mxoyfz1bxuv8govkg8yu.jpg

میره داخل پانل ادمینو اینجوری نشون میده:

http://8pic.ir/images/ha37piu4q47jaa29j0nt.jpg

اینجا مشکل اینه که اصلا نباید بره داخل ادمین چون ما خروج رو زدیم!!!!!

این کدها رو هم در صفحه admin_header.php زدم که چک کنه اگر user_role ادمین باشه بره مدیریت و اگه ادمین نباشه بره صفحه اول




ob_start();
session_start();

if(isset($_SESSION['user_role'])){
if($_SESSION['user_role'] !== 'admin'){
header("location: ../index.php");

}
}




این کد بالا مشکل داره؟
اصلا وقتی خروج رو زدم نباید وارد پوشه ادمین بشه! ولی میشه!

abbas3zaar
پنج شنبه 13 اسفند 1394, 16:59 عصر
null شدن سشن درسته؟
اگه درسته من فکر میکنم این کدهای آخر که گذاشتم (admin_hedaer.php) مشکل داره چون فکر کنم اجازه میده کاربر وارد admin بشه !




if(isset($_SESSION['user_role'])){
if($_SESSION['user_role'] !== 'admin'){
header("location: ../index.php");
} }

mohamadali1374
پنج شنبه 13 اسفند 1394, 17:23 عصر
سلام
هنگام خروج بجای اینکه مقادیر رو نال کنید از دستور unset استفاده کنید مثلا:



unset($_SESSION['username'] )

abbas3zaar
پنج شنبه 13 اسفند 1394, 17:39 عصر
سلام
هنگام خروج بجای اینکه مقادیر رو نال کنید از دستور unset استفاده کنید مثلا:



unset($_SESSION['username'] )



unset که کردم در صفحه اول ارور میده:

Notice: Undefined index: username in C:\xampp\htdocs\cms\includes\top_row.php on line 39


اینم کد صفحه اول سطر 39





if($_SESSION['username'] == null){
echo "<a href='login.php'> وارد شوید</a>";
} else {
echo "سلام ، " . $_SESSION['username'] . "<a href='logout.php'> خروج</a>";
}





فکر کنم با null مشکل نداریم، فکر کنم کدهای زیر مشکل داره. این چند تا خط بالا رو حذف هم کردم وقتی خروج رو میزنم بازم وارد لینک http://localhost/cms/admin میشه!! من نمیخوام وارد ادمین بشه





if(isset($_SESSION['user_role'])){
if($_SESSION['user_role'] !== 'admin'){
header("location: ../index.php");

}
}

mohamadali1374
پنج شنبه 13 اسفند 1394, 17:51 عصر
if($_SESSION['username'] == null){

این خط رو به شکل زیر تغییر بدید:

if(!isset($_SESSION['username']))

mohamadali1374
پنج شنبه 13 اسفند 1394, 17:55 عصر
البته تمامی سشن هایی رو که در صفحه logout.php برابر با نال قرار دادید رو unset کنید و اگر به ارور مشابه بالا برخورد کردید از کدی که در پیام قبلی دادم استفاده کنید
این کار باعث میشه در admin_hedaer.php وقتی که if (
if(isset($_SESSION['user_role'])){
)
میرسه وارد اون نشه

abbas3zaar
پنج شنبه 13 اسفند 1394, 18:24 عصر
if($_SESSION['username'] == null){

این خط رو به شکل زیر تغییر بدید:

if(!isset($_SESSION['username']))


البته تمامی سشن هایی رو که در صفحه logout.php برابر با نال قرار دادید رو unset کنید و اگر به ارور مشابه بالا برخورد کردید از کدی که در پیام قبلی دادم استفاده کنید
این کار باعث میشه در admin_hedaer.php وقتی که if (
if(isset($_SESSION['user_role'])){
)
میرسه وارد اون نشه

کدهای logout رو به اینی که شما گفتید تغییر دادم:




session_start();
unset($_SESSION['username']);
unset($_SESSION['firstname']);
unset($_SESSION['lastname']);
unset($_SESSION['user_role']);

header("Location: ../../index.php");




این قسمت هم به این تغییر دادم:




if(!isset($_SESSION['username']))
{ echo "<a href='login.php'> وارد شوید</a>";
} else {
echo "سلام ، " . $_SESSION['username'] . "<a href='logout.php'> خروج</a>";
}



ولی وقتی با یوزر ادمین وارد میشم و خروج رو میزنم و دوباره دستی آدرس admin رو توی مرورگرم وارد میکنم بااااااازم وارد ادمین میشه و ارور زیر رو میده:

Notice: Undefined index: firstname in C:\xampp\htdocs\cms\admin2\index.php on line 22


اینم خط 22:




echo "سلام ، " . $_SESSION['username'];




آخه وقتی خروج رو زدم نباید دوباره لینک ورود به ادمین کار کنه!!!!!!! چرا اینجوری میشه!؟

abbas3zaar
جمعه 14 اسفند 1394, 10:07 صبح
خودم پیدا کردم!

این کد رو:



if(isset($_SESSION['user_role'])){
if($_SESSION['user_role'] !== 'admin'){
header("location: ../index.php");

}
}



به این تغییر دادم:




if($_SESSION['user_role'] !== "admin"){
header("location: ../index.php");
}




مشکلی نداره؟ چون اینجوری کار میکنه