У меня есть база данных MySQL. В этой базе данных у меня есть таблица под названием users
, У меня есть пользователи username
, password
, role
, Если роль 0
тогда это пользователь. Если роль 1
тогда это админ.
Вот так сессия началась прямо сейчас.
if($count==1){
echo "true";
$_SESSION['username'] = $user;
$_SESSION['password'] = $pass;
}
else {
echo "Wrong";
}
Это то, что у меня вверху страниц:
session_start();
if(!isset($_SESSION['username'])){
header("location:login.php");
}
Я не совсем понимаю, как еще раз проверить роль. Например, если это роль 1 = они получают страницы администратора, если роль 0 — пользователь.
В настоящее время у меня есть только 1 администратор, и именно так я получил разрешение.
Но я не уверен, что это правильно. Мне нужны объяснения, пожалуйста.
if ( 'admin' == $_SESSION['username'] ) {
include('admin.php');
}
else {
include('user.php');
}
Эти две функции будут проверять наличие сеанса и проверять разрешение пользователей.
function confirmed_login(){
if(!isset($_SESSION['permission'])){
header('Location: login_redirect.php');
}
}
function permission_admin($permission){
if($permission != '1'){
header('Location: login_redirect.php');
}
}function check_login($p) {
permission_admin($p);
confirmed_login();
}
просто вызовите эту функцию в верхней части любой запрещенной страницы следующим образом:
check_login($SESSION['role']);
Вы должны установить роль в сеансе и проверить не имя пользователя, а его роль:
...
echo "true";
$_SESSION['username'] = $user;
$_SESSION['password'] = $pass;
$_SESSION['role'] = $role;
...
if ($_SESSION['role'] == 1) {
include('admin.php');
} else {
include('user.php');
}
или в качестве альтернативы установите переменную администратора и всегда проверяйте, существует ли она, когда пользователь входит в систему:
...
echo "true";
$_SESSION['username'] = $user;
$_SESSION['password'] = $pass;
if($role == 1) {
$_SESSION['admin'] = true;
}
...
if (isset($_SESSION['admin'])) {
include('admin.php');
} else {
include('user.php');
}
У вас есть подключение к базе данных в login.php, верно? Почему бы вам не использовать соединение и не получить информацию о роли пользователя, если имя пользователя и пароль, конечно, существуют в базе данных, тогда в соответствии с этим значением роли вы перенаправляете пользователя как (я установил соединение с процедурой и вызвал эту процедуру и загрузка информации) И в том случае, если вам нужно сделать контроль, существует ли пользователь или нет; rowcount> 1 например:
$role = "";
$username = "";
$password = "";
$conn = oci_connect(---);
$stid = oci_parse($conn, "begin packageX.login(:username,:password,:role); end;");
oci_bind_by_name($stid, ":username", $username);
oci_bind_by_name($stid, ":password", $password);
oci_bind_by_name($stid, ":role", $role);
if ( $role == 1 and $username!="" and $password!="") {
header( "Location: admin.php" );
}
else if($role == 0 and $username!="" and $password!=""){
header( "Location: user.php" );
}