Отображение объектов на основе того, вошел ли пользователь в систему или нет - PullRequest
1 голос
/ 18 ноября 2011

На моем сайте я узнаю о сессиях PHP для аутентификации пользователей.Я знаю, как ограничить просмотр всей страницы с помощью сеансов (просто проверьте, установлена ​​ли переменная сеанса 'uid' и, если она есть, покажите содержимое, если не перенаправите на ошибку).

Однако я 'Я пытаюсь найти лучший способ выборочно показывать и скрывать различные объекты (div, text, images), основываясь на том, вошел ли пользователь в систему или нет.Это так же просто, как проверить переменную сеанса 'uid' и отобразить в зависимости от того, установлена ​​она или нет?Есть ли более эффективный способ сделать этот идентификатор, если на странице много условных элементов?

Ответы [ 4 ]

1 голос
/ 18 ноября 2011

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

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

Вот быстрый пересмотр идеи Кая с именованной константой:

if(isset($_SESSION['uid'])){
  define("LOGGED_IN", 1);
}else{
  define("LOGGED_IN", 0);   
}

Тогда, по вашему мнению / вывод:

<?php if(LOGGED_IN): ?>
  <div>logged in content</div>
<?php endif; ?>

Единственное отличие состоит в том, что LOGGED_IN доступен в функциях, классах, везде.

И последнее, но не менее важное: если вы знакомы со стилем ОО, кажется, что создание объекта $ user, такого как vascowhite, - это способ, которым я бы (и делал) реализовывал статус входа в свои проекты. В его примере $ это объект $ user, к которому я обращаюсь.

Удачного кодирования, удачи друг.

1 голос
/ 18 ноября 2011

Просто используйте операторы if в скрипте

<?
    if(isset($_SESSION['uid'])){
?>
<div>
...
</div>
<?
    }
?>

Что касается поддержания чистоты, вы действительно должны попытаться максимально разделить html и php. Если для отображения требуется много данных, которые зависят от того, вошли ли вы в систему, вы можете выделить их и использовать вместо них include. Это поможет сделать вещи немного чище.

1 голос
/ 18 ноября 2011

Вы управляете сеансами, поэтому вы можете выбрать, что проверять.

$logged = isset($_SESSION['uid']);

, затем условие html:

<?php if($logged): ?>
<div>logged in content</div>
<?php endif; ?>

или без сохранения временной переменной:

<?php if(isset($_SESSION['uid'])): ?>
<div>logged in content</div>
<?php endif; ?>
0 голосов
/ 18 ноября 2011

Я использую инфраструктуру MVC (Zend Framework) и предоставляю каждому контроллеру объект User.Когда пользователь вошел в систему, я установил флаг в значение true, поэтому показ ограниченного содержимого только зарегистрированным пользователям так же прост: ->

//content for everybody
<?php if($this->user->isLoggedIn()):?>
//top secret stuff for logged in users only
<p>Only logged in users see this</p>
<?php endif; ?>

Редактировать: Просто чтобы прояснить;$this - объект представления в инфраструктуре MVC.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...