abbas3zaar
پنج شنبه 13 اسفند 1394, 17: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");
}
}
این کد بالا مشکل داره؟
اصلا وقتی خروج رو زدم نباید وارد پوشه ادمین بشه! ولی میشه!
این جدولم ( ستون 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");
}
}
این کد بالا مشکل داره؟
اصلا وقتی خروج رو زدم نباید وارد پوشه ادمین بشه! ولی میشه!