Скрипт входа со скрытыми кнопками

Я использовал PHP и JavaScript для создания веб-сайта моего отца. Он хочет включить систему входа на свой веб-сайт, и у меня есть дизайн системы с использованием PHP. Моя проблема в том, как показать кнопки, если человек вошел в систему?

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

Будет ли JavaScript хорошим способом сделать это или PHP, а может быть и то и другое вместе? Использование JavaScript для отображения и скрытия кнопок и PHP для проверки того, какие кнопки отображать. Взаимодействие с другими людьми

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
22
0
5 683
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Если вы используете javascript, чтобы скрыть кнопки, вы открываете дыру в безопасности в приложении. Злоумышленник может либо отключить javascript, либо применить свои собственные, чтобы обойти вашу безопасность.

Я предлагаю использовать PHP, чтобы выбрать отображение кнопок или нет. Я делаю это в .NET довольно часто.

Вы должны иметь возможность проверять доступ пользователей на стороне сервера всякий раз, когда они также пытаются использовать ограниченную кнопку.

Ответ принят как подходящий

Что касается безопасности, нельзя доверять тому, что исходит от клиента:

  • Посетитель может увидеть весь ваш код (HTML и Javascript, но не PHP) и попробовать что-нибудь
  • Посетитель может даже не использовать браузер; отправить запрос с помощью скрипта тривиально просто

Это означает, что скрытие кнопок является хорошим дизайном пользовательского интерфейса (потому что вы не можете использовать их, если не вошли в систему). Но это не функция безопасности. Функция безопасности проверяет на сервере, что посетитель вошел в систему, перед каждым действием, которое требует этого.

Если вы не собираетесь показывать кнопки, бесполезно отправлять 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;
        }
    }
?>

Подводя итог тому, что было показано выше: вы проверите, вошли ли они в систему, если они есть, вы отобразите кнопки / ссылки, которые вы хотите видеть только для зарегистрированных участников.

Brad 16.10.2008 05:47

Все, что написал Кристиан Лескуайер, правильно. Обратите внимание, однако, на то, что он сказал «я бы», а не «вам следует». Выбор не такой простой.

Во-первых, безопасность не является проблемой при выборе. У вас должна быть проверка безопасности на сервере, когда вы выполняете действие. Какой код решает показать / скрыть кнопку, которая приводит к действию, не имеет значения.

Это оставляет нам только один недостаток выполнения логики отображения / скрытия в 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  
  }
?> 

В переменных нельзя использовать тире

Christoffer 09.10.2018 14:21

Другие вопросы по теме