2016-05-02 19 views
0

Это некоторая кодировка в моей навигационной панели. Я пытаюсь определить, вошел ли пользователь в систему или нет. То, что должно произойти, - это когда пользователь регистрируется, тогда он показывает небольшое раскрывающееся меню с параметрами, позволяющими пользователю редактировать свою учетную запись или выйти из системы, но она не работает.Обнаружение, если пользователь зарегистрирован

  <?php 
      function loggedIn(){ 
      $_SESSION['loggedin'] = true; 
      $_SESSION['username'] = $username; 
      if(isset($_SESSION['username'])!="") 
      { echo '<li class="dropdown"> 
        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'. $_SESSION['username'] .'<span class="caret"></span></a> 
        <ul class="dropdown-menu"> 
         <li><a href="#">Action</a></li> 
         <li><a href="#">Another action</a></li> 
         <li><a href="#">Something else here</a></li> 
         <li role="separator" class="divider"></li> 
         <li><a href="#">Separated link</a></li> 
         <li role="separator" class="divider"></li> 
         <li><a href="#">One more separated link</a></li> 
        </ul> 
       </li>'; 
      }else{ 
       echo '<li><a href="#login" data-toggle="modal" data-target="#login" id="loginbtn"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>'; 
       } 
      } 
      loggedIn(); 
      ?> 
+2

вы устанавливаете '$ _SESSION ['username']' и проверяете следующую строку, если isset? Какова идея ...? – Random

+0

Это должно быть причиной ошибок компиляции, поскольку '$ username' не было определено в функции и не передается в функцию в качестве параметра, поэтому поэтому выходит из области видимости ** – RiggsFolly

+0

Также вы не похожи на то, что вы схватили сеанс 'session_start()' в этом коде, хотя это может быть связано с тем, что вы предоставили нам короткую версию вашего кода – RiggsFolly

ответ

0

Минута вы установите переменную $ _SESSION [ 'имя пользователя'], ваш тест на если (Исеть ($ _ SESSION [ 'имя пользователя'])! = "") Будет всегда выполняться, так как переменная установлена. Для моего процесса входа у меня обычно есть скрипт doLogin.php, который аутентифицирует пользователя по отношению к базе данных, и если аутентификация проходит, он устанавливает необходимые переменные $ _SESSION. Если он терпит неудачу, он устанавливает переменную $ _SESSION ['loginAttemptCount'] и выводит значение $ _SESSION ['username'] и связанных переменных.

Таким образом, каждая страница PHP просто выполняет if (isset ($ _ SESSION ['username'])) и настраивается соответствующим образом.

Надеюсь, что это поможет.

+0

. Я должен добавить, что после аутентификации сценарий doLogin.php пересылается на страницу authErr.php или на loginSuccess .php. – Kaptkaos

0

нормальный процесс:

  • Войти скрипт создает что-то в сессии

  • Сценарии, которые хотят знать, если пользователь вошел в систему, проверить для этого значения в сессии.

login.php

<?php 
session_start(); 
// do all your login checks for userid/password 

$_SESSION['username'] = $username; 

. . . . 

any_other.php

<?php 
    session_start(); 

    function AddForLoggedInUsers(){ 

     if(!empty($_SESSION['username'])) { 
      $htm = '<li class="dropdown"> 
       <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">'. $_SESSION['username'] .'<span class="caret"></span></a> 
       <ul class="dropdown-menu"> 
        <li><a href="#">Action</a></li> 
        <li><a href="#">Another action</a></li> 
        <li><a href="#">Something else here</a></li> 
        <li role="separator" class="divider"></li> 
        <li><a href="#">Separated link</a></li> 
        <li role="separator" class="divider"></li> 
        <li><a href="#">One more separated link</a></li> 
       </ul> 
      </li>'; 
     }else{ 
      $htm = '<li><a href="#login" data-toggle="modal" data-target="#login" id="loginbtn"><span class="glyphicon glyphicon-log-in"></span> Login</a></li>'; 
     } 

     return $htm; 
    } 

    // other code 

    echo AddForLoggedInUsers(); 

Его также лучше идея поместить HTML генерируемую в функции в переменную, то при вызове функции у вас есть возможность добавить к результату функции или просто повторить ее прямо или, возможно, даже изменить ее.

Смежные вопросы