Авторизация PHP MVC модель

304
06 ноября 2017, 23:29

Здравствуйте, имеется MVC модель сайта, смысл такой если человек авторизован имеет свою сессию, то контроллер возвращает по адресу "/admin" панель администратора. Если нет, то возвращает форму авторизации. Проблема заключается в следующем, что когда я авторизуюсь, то нужно обновить страницу вручную, что бы появилась панель администратора, если использовать header( "Location: /admin" ); то выкидывает ошибку - Warning: Cannot modify header information - headers already sent by Что делать?

Код контроллера:

class AdminController
{
    public function actionPanel()
    {
        if (isset($_SESSION['users-login'])) {
            $client = AdminPanel::getSelectClientList();
            include_once ROOT . '/views/layaut/administrator/Panel.php';
        }else{
            include_once ROOT . '/views/layaut/administrator/Login.php';
        }
        return true;
    }
}

Код авторизации:

<?php
include_once ROOT . '/views/scripts/scripts.html';
include_once ROOT . '/views/views/administrator/Login.html';
$login = $_POST;
$errors = array();
if (isset($login['do_admin'])){
    $log = AdminPanel::getEntrance('users', $login['email'], $login['pass']);
    if ($log == false){
        $errors[] = 'Неверно введено имя пользователя или пароль';
    }
    if(empty($errors)){
        $_SESSION['users-login'] = $log;
        header( "Location: /admin" );
    }else {
        echo '<div style="color: #ff4930;">' .array_shift($errors).'</div>';
    }
}

сама форма HTML:

<div class="container" id="authorization">
    <div class="col-12 col-md-4">
        <form action="\admin" method="post" class="form-signin">
            <h2 class="form-signin-heading">Авторизация</h2>
            <label for="inputEmail" class="sr-only">Адрес электронной почты</label>
            <input name='email' type="email" id="inputEmail" class="form-control" placeholder="Адрес электронной почты" required="" autofocus="">
            <label for="inputPassword" class="sr-only">пароль</label>
            <input name='pass' type="password" id="inputPassword" class="form-control" placeholder="Пароль" required="">
            <div class="checkbox">
            </div>
            <button class="btn btn-lg btn-primary btn-block" type="submit" name="do_admin">Вход</button>
        </form>
    </div>
</div>
Answer 1

Не надо ничего выводить на экран до header(), иначе он не будет работать. Надо удалить следующее:

include_once ROOT . '/views/scripts/scripts.html';
include_once ROOT . '/views/views/administrator/Login.html';

Тогда все будет работать.

READ ALSO
Yii2 разлогинивание на всех устройствах

Yii2 разлогинивание на всех устройствах

ЗдравствуйтеЕсть проект на Yii2 фреймворке и там нужно сделать так чтоб при выходе пользователя на одном устройстве/браузере его авторизация...

286
php - функции, аргументы

php - функции, аргументы

Всем приветВопрос по PHP

264
Twitch трансляция [требует правки]

Twitch трансляция [требует правки]

Как добавить twitch трансляцию на свой сайт?

281