Сдвиг пользователей логинов в среде php mvc - PullRequest
0 голосов
/ 30 марта 2012

Я пытаюсь выполнить, вероятно, довольно простую задачу, но я где-то застрял.

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

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

Но кажется, что это не работает так ... Когда я делаю выход, япотерять все.Я был бы очень признателен, если бы кто-то мог помочь мне в этом.Я также могу вставить код, если кто-то захочет взглянуть на него.

Вот код входа в систему

if(isset($_POST['login']) || isset($adminInit)) {
    if(!isset($adminInit)) {
        // it is a regular user
        // clean POST input
        // return the user from the database
    }
    else {
        // it is the admin
        // return the user from the database
    }
    if(!empty(the database call)) {
        if(isset($adminInit)) {
            $this->session->adminID = $this->session->id;
        }
        $this->session->loggedIn = true;
        $this->session->id = $data['id'];
        $this->session->level = $data['user_level'];
        if($this->session->level == 9)
            header('location: ' . __SITE_URL . 'admin/');
        else
            header('location: ' . __SITE_URL);
    }
    else $printError;
}

А это код выхода из системы

if(isset($adminInit)) {
    $this->session->id = $this->session->adminID;
    header('location: ' . __SITE_URL . 'authenticate/login/');
}
$this->session->destroy();
header('location: ' . __SITE_URL);

Ответы [ 2 ]

0 голосов
/ 02 апреля 2012

Вместо выполнения session_destroy () при каждом выходе из системы. Вместо этого вы должны реализовать stack или некоторую похожую LIFO структуру в сеансе для хранения списка учетных записей.

И да, вы должны сохранять всю цепочку учетных записей в сеансе и быть фактически доступными, потому что позже вам может понадобиться не просто «просматривать учетную запись как пользователя», но также иметь возможность видеть некоторую дополнительную информацию «как администратор».

По сути, вам нужно реализовать при входе в систему новые данные пользователя (скорее всего, как сам массив). И при выходе из системы вы получаете последний активный пользователь .. затем проверьте, что является следующим элементом в стеке. Если стек пуст, вы выходите из системы полностью (и, возможно, уничтожаете сеанс). Есть ли еще какая-то информация об учетной записи - вы перенаправили его на соответствующую страницу.

0 голосов
/ 31 марта 2012

Звучит так, как будто вы теряете данные сеанса - вы теряете идентификатор сеанса (cookie, который становится неустановленным или недействительным из-за настроек домена / пути), или где-то скрывается session_destroy ().

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