Несколько администраторов войти в систему с PHP
Я пытаюсь создать сайт PHP с более чем одним администратором. У меня есть некоторые сомнения
Как я могу проверить, вошел ли админ в систему? Я знаю, что должен использовать сеансы по соображениям безопасности, но как узнать, кто из администраторов вошел в систему?
Должен ли я установить
$_SESSION['username']
переменная, когдаusername
выполняет вход в систему и отправляет файл cookie, содержащийusername
тоже? Таким образом, я знаю, кто он (или притворяется), и могу проверить,username
фактически вошел в систему, проверяя$_SESSION['username']
перед показом страниц. Это безопасно?
2 ответа
Как я могу проверить, вошел ли админ в систему? Я знаю, что должен использовать сеансы по соображениям безопасности, но как узнать, кто из администраторов вошел в систему?
Так же, как вы проверяете, вошел ли обычный пользователь в систему. Конечно, сеанс. И обычный пользователь и администратор должны иметь $_SESSION['username']
установить. Чтобы сделать кого-то администратором, я думаю, вы используете флаг в БД, скажем, столбец access_level
, ENUMs 1
=> пользователь, 2
=> Администратор. Поэтому, когда вы входите в систему, включите и эту сессию. $_SESSION['access_level']
скажет вам, если этот пользователь является администратором, и $_SESSION['username']
скажет вам свое имя пользователя.
Должен ли я установить переменную $_SESSION['username'], когда username выполняет вход в систему, и также отправить cookie, содержащий имя пользователя? Таким образом, я знаю, кто он (или притворяется), и могу проверить, действительно ли имя пользователя вошло в систему, проверяя $_SESSION['username'] перед показом страниц. Это безопасно?
Сессий достаточно. Они также устанавливают куки на сайте клиента. Не хранить дополнительные $_COOKIE['username']
,
Я использую структуру MVC, поэтому я хотел бы построить что-то (модель, контроллер), чтобы использовать его также для операций входа / проверки учетных данных / выхода из системы. Какой самый элегантный (объектно-ориентированный) способ добиться этого?
В нескольких словах - модельный метод входа в систему. Если пользователь является администратором, нормальный и т. Д., Контроллер может сделать это, используя извлечение модели, которое запрашивает БД, принимая имя пользователя, пароль, уровень доступа и т. Д.
const USER_NORMAL = 1;
const USER_ADMIN = 2;
public function isAdmin() {
$row = $this->_application->UserModel->login();
if($row['access_level'] == self::USER_ADMIN) {
return true;
}
return false;
}
У меня есть несколько сценариев (то есть сценарий "upload.php", позволяющий администраторам загружать файлы), к которым можно получить доступ, только если один из администраторов вошел в систему. Эти сценарии не являются представлениями, поэтому я не могу проверить вход (мой Намерение было проверить вход на уровне контроллера, прежде чем показывать страницы). Так как я могу сделать в этом случае?
Так что проверяйте контроллер, как вы хотите, с помощью метода выше.
if(!$this->UserController->isAdmin()) {
header("Location: index.php");
}
else {
// show page
}
- Вы должны установить сессию для имени пользователя и пароля (которые получаются из формы входа в систему). Затем вы подключаетесь к mysql и проверяете, если user_name_field = "username" && password_field = "passowrd" => пользователь вошел в систему Etc: "SELECT user_id,user_name FROM users WHERE user_name = "ABC" AND user_pass = "123456" Этот sql может возвращать пустой массив или массив из одного элемента. Если пустой массив => регистрация не проходит, иначе => logged
- Вам нужно только установить сеанс или cookie, следует знать, что: facebook.com сохранит пароль и userid = cookie. Вы не беспокоитесь о куки не безопасно
- в структуре MVC вы должны создать 1 представление для просмотра формы входа в систему, 1 функцию в классе контроллера для получения имени пользователя, пароля, 1 функцию модели для подключения и запроса sql, вернуть результат массива для этого контроллера. Этот процесс: действие пользователя в представлении, просмотр отправляет данные контроллеру, контроллер использует данные, подключается к базе данных с моделью и получает результат из модели для возврата для просмотра
- Вы должны возвратить false или перенаправить или предупредить, когда любой пользователь, не являющийся администратором, имеет доступ к странице загрузки
P/s: извините, если мой английский беспокоит вас. я просто использую гугл переводчик