Я использовал PHP и JavaScript для создания веб-сайта моего отца. Он хочет включить систему входа на свой веб-сайт, и у меня есть дизайн системы с использованием PHP. Моя проблема в том, как показать кнопки, если человек вошел в систему?
Например - У вас есть Дома, Товары, О нас и Контакт. Я хочу иметь кнопки для Дилер, Распределитель и, возможно, другую информацию, если пользователь вошел в систему. Так что у меня будут Дома, Товары, О нас, Контакты, Dealer (если авторизация дилера), Распределитель (если авторизация дистрибьютора) и т. д.
Будет ли JavaScript хорошим способом сделать это или PHP, а может быть и то и другое вместе? Использование JavaScript для отображения и скрытия кнопок и PHP для проверки того, какие кнопки отображать. Взаимодействие с другими людьми



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы используете javascript, чтобы скрыть кнопки, вы открываете дыру в безопасности в приложении. Злоумышленник может либо отключить javascript, либо применить свои собственные, чтобы обойти вашу безопасность.
Я предлагаю использовать PHP, чтобы выбрать отображение кнопок или нет. Я делаю это в .NET довольно часто.
Вы должны иметь возможность проверять доступ пользователей на стороне сервера всякий раз, когда они также пытаются использовать ограниченную кнопку.
Что касается безопасности, нельзя доверять тому, что исходит от клиента:
Это означает, что скрытие кнопок является хорошим дизайном пользовательского интерфейса (потому что вы не можете использовать их, если не вошли в систему). Но это не функция безопасности. Функция безопасности проверяет на сервере, что посетитель вошел в систему, перед каждым действием, которое требует этого.
Если вы не собираетесь показывать кнопки, бесполезно отправлять HTML и изображения в браузер, а затем скрывать их с помощью Javascript. Я бы проверил с PHP.
В моей работе мы создали библиотеку, которая предоставляет такие функции, как проверка, вошел ли пользователь в систему. Например:
<?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();
}
В вашем файле меню или 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;
}
}
?>
Все, что написал Кристиан Лескуайер, правильно. Обратите внимание, однако, на то, что он сказал «я бы», а не «вам следует». Выбор не такой простой.
Во-первых, безопасность не является проблемой при выборе. У вас должна быть проверка безопасности на сервере, когда вы выполняете действие. Какой код решает показать / скрыть кнопку, которая приводит к действию, не имеет значения.
Это оставляет нам только один недостаток выполнения логики отображения / скрытия в Javascript - HTML-код, отправляемый пользователю, больше, чем необходимо. Это может не иметь большого значения.
Однако наличие логики отображения / скрытия в PHP имеет минус. Требуемый код PHP обычно - это пометить суп. Код Акиры представляет собой хороший пример того, как это обычно делается.
Соответствующий код Javascript, вероятно, будет выглядеть примерно так:
if (logged())
{
elementSecretArea.style.display = "list-item";
}
(при условии, что элементы, которые можно скрыть, по умолчанию имеют display: none).
Этот стиль также допускает приятный сценарий «Ajax»: пользователь видит страницу без секретной области, вводит пароль, видит секретную область, и все это без обновления страницы.
Итак, если у вас уже есть сценарий, который запускается при загрузке документа по другим причинам, я бы серьезно подумал о том, чтобы иметь там логику отображения / скрытия.
В основном, если у вас есть меню в html, скажем, в качестве списка <ul> <li>Home</li> </ul> вы добавляете php после </li> последнего элемента:
<?php
if ($session-logged_in) {
?>
<li>My Account</li>
<?php
}
?>
В переменных нельзя использовать тире
Подводя итог тому, что было показано выше: вы проверите, вошли ли они в систему, если они есть, вы отобразите кнопки / ссылки, которые вы хотите видеть только для зарегистрированных участников.