Как заставить объект $ user работать на других страницах, если пользователь вошел в систему и страница входа перенаправляется в профиль пользователя - PullRequest
0 голосов
/ 06 ноября 2018

Внутри страницы index.php находится некоторый код входа в систему, и когда пользователь входит в систему, он перенаправляет их на страницу index.php (просто обновляет страницу индекса) и альт, пользователь успешно вошел в систему.

Однако, когда я изменяю перенаправление на другую страницу (logged_in.php), мой объект $ user, похоже, не имеет никаких данных, доступных для проверки, вошел ли пользователь в систему или нет. Я предполагаю, что данные объекта $ user не передаются из сеанса index.php в сеансы logged_in.php.

Следующий код работает для перенаправления index.php:

require_once 'core/init.php';

session_start();

$user = $_SESSION["user"];

    if (!$user->isLoggedIn())   
{   
    echo 'not logged in';
    //Redirect::to('index.php');
}
if ($user->isLoggedIn()) 
{
    echo escape($user->data()->name);
}

Но тот же код не работает для logged_in.php.

Ошибка, отображаемая php:

Undefined variable: _SESSION in C:\wamp\etc...

Я уверен, что это что-то простое, например, обработка сессии.

Вот код для входа:

session_start();

if(isset($_POST['login'])) 
    {
        //echo "teste";
        if(Token::check(Input::get('token'))) 
        {   
            //echo "testeasd";
            $validate = new Validate();
            $validation = $validate->check($_POST, array(
              'username' => array('required' => true),
              'password' => array('required' => true)
            ));
            if($validation->passed()) 
            {
                //echo "Passou!";
                $user = new User();
                $remember = (Input::get('remember') === 'on') ? true : false;
                $login = $user->login(Input::get('username'), Input::get('password'), $remember);
                if($login) 
                {
                    $_SESSION["user"] = $user;
                    //echo $_SESSION['user'];
                    //print_r($_SESSION['user']);
                    Redirect::to('logged_in.php');
                } 
                else 
                {
                    echo "<p class='label label-danger'>Sorry, logging in failed.</p><br><br>";
                }

            } 
            else 
            {
                foreach($validation->errors() as $error) 
                {
                    echo $error, '<br>';
                }
            }
        }
    }

и logged_in.php просто содержит код, который делает index.php:

require_once 'core/init.php';

session_start();

$user = $_SESSION["user"];

    if (!$user->isLoggedIn())   
{   
    echo 'not logged in';
    //Redirect::to('index.php');
}
if ($user->isLoggedIn()) 
{
    echo escape($user->data()->name);
}

Что стоит отметить:

В index.php у меня есть require_once 'init.php', который инициализирует классы и функции, включая user, validate, cookie, config, db, input, hash и другие подобные вещи. index.php также имеет код $user = new User(); вверху.

Полегче со мной - я новичок, просто пытаюсь понять простые логины.

1 Ответ

0 голосов
/ 06 ноября 2018

Вам нужно начинать сеанс в каждом скрипте, где вам нужен доступ к переменной $ _SESSION, но вместо того, чтобы ставить session_start (); в каждом скрипте вы можете создать файл headers.php и поместить туда весь свой повторяющийся код, включая session_start ();

session_start(); // add this line

$user = $_SESSION["user"];

    if (!$user->isLoggedIn())   
{   
    echo 'not logged in';
    //Redirect::to('index.php');
}
if ($user->isLoggedIn()) 
{
    echo escape($user->data()->name);
}
...