2015-01-11 3 views
0

Я работаю над аутентификацией страницы. Он может войти в систему уже, но я хочу, чтобы он выполнял аутентификацию пользователей на других страницах, а если кто-то пытается получить доступ к страницам через URL. Если человек не является зарегистрированным пользователем, перенаправьте его на страницу входа в систему. Я попробовал это, работая с сессиями, но это не сработает. Я следую структуре MVC Как-то сеансы никогда не отключаются. Я не знаю, почему ..Аутентификация пользователя Сессия устанавливается с начала

Вот как я сделал это

Мой LoginController

<?php 
//LoginController 
if($_POST) 
{ 
    if(isset($_POST['submit']) AND $_POST['submit'] == "login") 
    { 
     $username = $_POST['username']; 
     $password = $_POST['password']; 
     try 
     { 
      include '../model/Login.php'; 
      $login = new Login($db, $username, $password); 

      if($login == TRUE) 
      { 
       session_start(); 
       $_SESSION['username'] = $username; 
       header("Location:../index.php"); 
      } 

     } 
     catch (Exception $exc) 
     { 
      echo $exc->getMessage(); 
     } 

    } 
} 

Мой индекс контроллера (для главной страницы)

<?php 
include 'model/Database.php'; 
session_start(); 
//Checks if the user is logged in. 
if(!isset($_SESSION['username'])) { 
//echo"<h2>You have no access to this page!"; 
    include 'view/login.php'; 
    die(); 
} 
include 'c:/wamp/www/mvc/model/Display.php'; 

$displayPatients = new Display($db); 
$dataDisplay = $displayPatients->getData(); 
include 'view/Main.php'; 
?> 

мой logout.php : Когда пользователь нажимает на эту кнопку:

<?php 

//Logout 
//destroys the session when the user clicks logout 
session_destroy(); 
header('Location:view/login.php'); //redirect to the login 

Пользователь выходит из системы, перенаправляется на страницу входа, но сеанс по-прежнему установлен. Сессия устанавливаются с самого начала, и я понятия не имею, почему ..

ответ

1

Просто извлеченные из руководства для session_destroy()

session_destroy() уничтожает все данные, связанные с текущей сессией , Он не отменяет ни одну из глобальных переменных, связанных с сеансом , или не удаляет файл cookie сеанса. Чтобы снова использовать переменные сеанса , необходимо вызвать session_start().

Чтобы убить сеанс вообще, как и для входа пользователя в систему, идентификатор сеанса также должен быть отменен. Если cookie используется для распространения идентификатора сеанса (поведение по умолчанию), тогда cookie сеанса должен быть удален . Для этого может использоваться setcookie().

Так что мне кажется, что вам нужно уничтожить идентификатор сеанса или установить его на что-то еще при запуске нового сеанса, иначе ваш следующий sesson_start() снова возобновит старый сеанс.

По этой причине вы также можете просто восстановить идентификатор сеанса при входе в систему перед перенаправлением. Ах, и всегда полезно использовать «выход»; после перенаправления «Местоположение:» через «header()».

session_start(); 
session_regenerate_id(true); 
+0

Итак, вы имеете ввиду, что этого достаточно, если я поместил 'session_regenerate_id (true);' после 'session_start();'? Я попробовал, но это не сработало –

+0

На второй взгляд ваша проблема может лежать в совершенно другом месте. Вы даже начали сеанс перед вызовом session_destroy(), потому что я не вижу этого в вашем скрипте logout.php? В противном случае вы не сможете уничтожить правильную сессию (или что-то в этом роде). –

+0

Ой, спасибо, что он наконец-то работал! –

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