#php
#php
Вопрос:
Я пытаюсь использовать переменные сеанса для ограничения доступа к странице. У меня есть 3 уровня доступа: администратор, справка и технический. На страницах со справкой или техническим доступом администратор также разрешен. Я не могу понять, как написать оператор if. Вот код, который у меня есть:
<?php
//Start session
session_start();
//Check whether the session variable SESS_MEMBER_ID is present or not
if(!isset($_SESSION['SESS_MEMBER_ID']) || (trim($_SESSION['SESS_MEMBER_ID']) == '')) {
header("location: fail_access.php");
exit();
}
if ((!isset($_SESSION['SESS_ACCESSLVL']) == 'admin') || (!isset($_SESSION['SESS_ACCESSLVL']) == 'help')) {
header("location: fail_access.php");
exit();
}
?>
Когда у меня все так, как показано здесь, это позволяет всем уровням доступа к странице, которая должна быть ограничена «справка» (которая также включает «администратор»).
Может кто-нибудь указать на ошибку моих способов?? Любая помощь с благодарностью. Я очень новичок в этом и, очевидно, не до конца понимаю это.
Приветствия
Комментарии:
1.
isset()
возвращает aboolean
, поэтому!isset($_SESSION['SESS_ACCESSLVL']) == 'help'
не будет работать как «ожидаемый».
Ответ №1:
Попробуйте:
if (
!isset($_SESSION['SESS_ACCESSLVL']) ||
!(($_SESSION['SESS_ACCESSLVL'] == 'admin') || ($_SESSION['SESS_ACCESSLVL'] == 'help'))
)
{
header("location: fail_access.php");
exit();
}
Вы также можете попробовать http://php.net/manual/en/function.in-array.php
$allowedAccessLevels = array('admin', 'help');
if (
!isset($_SESSION['SESS_ACCESSLVL']) ||
!in_array($_SESSION['SESS_ACCESSLVL'], $allowedAccessLevels)
)
{
header("location: fail_access.php");
exit();
}
Комментарии:
1. Обратите внимание на Mate!! Спасибо за вашу помощь. Это помогает мне начать понимать, как делать то, что я хочу делать. Благодаря таким желающим людям, как вы, у тех из нас, кто пытается понять, есть, по крайней мере, шанс на победу. Приветствия!
Ответ №2:
isset
проверяет, установлена ли переменная или элемент массива, и соответственно возвращает логическое значение. Он никак не учитывает и не возвращает значение.
Просто убедитесь, что он установлен, затем, если это так, проверьте значение.
if(isset($_SESSION['SESS_ACCESSLVL']))
{
$level = $_SESSION['SESS_ACCESSLVL'];
// Check $level
}
Ответ №3:
!isset($_SESSION['SESS_ACCESSLVL']) == 'admin'
Что вы пытаетесь здесь сделать? isset
возвращает логическое значение. Вы сравниваете логическое значение со строкой. Подумайте об этом.
Попробуйте это:
(isset($_SESSION['SESS_ACCESSLVL']) amp;amp; $_SESSION['SESS_ACCESSLVL']==='admin')
Эта isset
часть не является строго необходимой, потому что последнее условие не будет выполнено, если оно не установлено, но я думаю, что в противном случае оно выдает предупреждение (если вы их не отключили).
Ответ №4:
isset возвращает true или false. Вы сравниваете это значение true / false с вашими строками доступа. В PHP true == 'some string'
это TRUE, поэтому ваш код делает каждого администратором.
Комментарии:
1. Теперь я это вижу. Я пытаюсь разобраться в этих вещах, и Интернет — мой учитель, поэтому иногда это сбивает меня с толку. Спасибо, что указали мне на это. Приветствия.