Вход Script со скрытыми кнопками
Я использую PHP и JavaScript для создания моего сайта папы. Он хочет включить систему регистрации на свой сайт, и у меня есть дизайн для системы с использованием PHP. Моя проблема в том, как показывать кнопки, если пользователь зарегистрирован?
Пример - У вас есть Домой, Продукты, О нас и Контакты. Я хочу иметь кнопки для Дилера, Дистрибьютора и, возможно, другую информацию, если пользователь вошел в систему. Таким образом, у меня будут Домой, Продукты, О нас, Контакты, Дилер (если вход в дилер), Дистрибьютор (если вход для дистрибьютора) и так вперед.
Будет ли JavaScript хорошим способом сделать это или PHP, а может быть, и то, и другое? Использование JavaScript для отображения и скрыть кнопки и PHP, чтобы проверить, какие кнопки показывать.
Ответы
Ответ 1
Что касается безопасности, , вы не можете доверять тому, что приходит от клиента:
- Посетитель может видеть весь ваш код (HTML и Javascript, а не PHP) и попробовать материал
- Посетитель может даже не использовать браузер; тривиально легко отправить запрос с помощью script
Это означает, что скрытие кнопок - это хороший дизайн пользовательского интерфейса (потому что вы не можете использовать их, если вы не вошли в систему). Но это не функция безопасности. Функция безопасности проверяет на сервере, что посетитель регистрируется перед каждым действием, требующим его.
Если вы не собираетесь показывать кнопки, нецелесообразно отправлять HTML и изображения в браузер, а затем скрывать их с помощью Javascript. Я бы посмотрел на PHP.
Ответ 2
В вашем файле меню или w/e вы помещаете:
<? require 'auth.php' ?>
<ul>
<li><a href="">Home</a></li>
<li><a href="">Products</a></li>
<? if( loggedin() ): ?><li><a href="">Secret area</a></li><? endif; ?>
</ul>
Затем на страницах, требующих авторизации, просто выполните следующее:
<?php
require 'auth.php';
require_login();
?>
Где auth.php может содержать:
<?php
function loggedin(){
return isset( $_SESSION['loggedin'] );
}
function require_login(){
if( !loggedin() ){
header( 'Location: /login.php?referrer='.$_SERVER['REQUEST_URI'] );
exit;
}
}
?>
Ответ 3
Если вы используете javascript для скрытия кнопок, вы открываете дыру в приложении. Злоумышленник может либо отключить javascript, либо применить некоторые свои собственные, чтобы обойти вашу безопасность.
Я предлагаю использовать PHP для выбора или отрисовки кнопок или нет. Я делаю это в .NET довольно часто.
Вы должны иметь возможность проверять доступ пользователей на стороне сервера, когда они пытаются использовать кнопку с ограничениями.
Ответ 4
То, что мы сделали на моей работе, - это библиотека, предоставляющая функции, такие как проверка, вошел ли пользователь в систему. Например:
<?php
require_once 'Auth.php';
// output some html
if (isLoggedIn()) {
echo 'html for logged in user';
}
// rest of html
Для страниц, которые должны видеть только проверенные пользователем пользователи, контроллер проверяет, вошли ли они в систему и не перенаправляет ли они их на страницу входа.
<?php
public function viewCustomer($customerId) {
if (!isLoggedIn())
redirectToLoginPage();
}
Ответ 5
Все, что написал Кристиан Лескуйер, верно. Обратите внимание, однако, что он сказал "Я бы", а не "вы должны". Выбор не так просто.
Прежде всего, безопасность не является проблемой при выборе. При выполнении действия необходимо иметь проверку безопасности на сервере. Какой код решает показать/скрыть кнопку, ведущую к действию, не имеет значения.
Это оставляет нам только один недостаток, заключающийся в том, что мы делаем логику show/hide в Javascript - HTML, отправленный пользователю, больше, чем необходимо. Это не может быть большой проблемой.
Если показать/скрыть логику в PHP, есть минус. Необходимый PHP-код обычно является тегом суп. Код Akira служит хорошим примером того, как обычно это делается.
Соответствующий код Javascript, вероятно, будет выглядеть примерно так:
if (logged())
{
elementSecretArea.style.display = "list-item";
}
(при условии, что элементы, которые могут быть скрыты, имеют отображение: по умолчанию не установлено).
Этот стиль также позволяет славный сценарий "Ajax": пользователь видит страницу без секретной области, вводит пароль, видит всю секретную область без обновления страницы.
Итак, если у вас уже есть script, который запускается при загрузке вашего документа по другим причинам, я бы серьезно подумал о том, есть ли там демонстрация/скрытие логики.
Ответ 6
В основном, где у вас есть меню в html, скажем, как список <ul> <li>Home</li> </ul>
, вы добавляете php после </li>
последнего элемента:
<?php
if($session-logged_in) {
?>
<li>My Account</li>
<?php
}
?>
Ответ 7
Что вы делаете, просто используете сеанс, когда пользователь вошел в систему. Вы можете это так
$_SESSION["UserId"] = $row['iduser'];
$_SESSION["UserType"] = $row['user_type'];
$_SESSION["UserName"] = $row['username'];
Затем вы можете проверить этого пользователя с типом пользователя и сделать видимые необходимые кнопки, как это
<?php
if( $_SESSION["UserType"] == 'Dealer'){
?>
<a href="your url" class="btn btn-primary" />
<?php
}
?>