Начало сеанса внутри класса - PullRequest
0 голосов
/ 27 февраля 2019

Кажется, что запуск сеанса внутри метода класса не работает.

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

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

Это длинная строка кода, поэтому я не включил его первым, чтобы не беспокоить вас.Вы должны рассматривать только с 3-м, если оператор и метод userSession ().

class Users extends Controller
{
   public function login(){
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        //Sanitize input data
        $_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
        $data = [
            'email' => trim($_POST['email']),
            'password' => trim($_POST['password']),
            'email_err' => '',
            'password_err' => ''
            ];

        if ($this->userModel->findUserByEmail($data['email'])) {
            //user found, Login
        if ($userRow = $this->userModel->login($data['email'], $data['password'])){
            $this->userSession($userRow);
            $this->view("pages/index");
        } elseif (!$this->userModel->login($data['email'], $data['password'])){
                $data['password_err'] = 'hujovas passwordas';
                $this->view("users/login", $data);
                }
        } else {
            //mail not found
            $data['email_err'] = 'email not found';
            $this->view('users/login', $data);
        }
    } else {
        //Sitas default
        $data = ['email' => '', 'password' => '', 'email_err' => '', 'password_err' => ''];
        $this->view("users/login", $data);
        }
}


public function userSession($userRow){

    session_start();
    $_SESSION['id'] = $userRow->ID;
    $_SESSION['email'] = $userRow->email;
    $_SESSION['firstname'] = $userRow->firstname;
    $_SESSION['lastname'] = $userRow->lastname;
    redirect('pages/index');
}

}//class

1 Ответ

0 голосов
/ 27 февраля 2019

Ничто не мешает вам начать сеанс внутри класса или прекратить его работу, когда это сделано таким образом, но эта проблема заключается в том, что session_start() должен запускаться ДО того, как любой вывод будет отправлен в браузер.

Когда вы начинаете сеанс в классе, нет никакого способа узнать, будет ли создан этот класс, и соответствующий метод, называемый ПЕРЕД чем-то еще, передал что-то в браузер.

Если вы делаете

<?php
    $my_session = new session_class;

    .. code, code ,code
?>
<DOCTYPE html>
!<-- other html -->

Тогда это, вероятно, будет работать

Но если вы сделаете

<DOCTYPE html>
<html>
<head>
    !<-- other html -->
<?php
$my_session = new session_class;

Тогда сессия определенно не будет работать.

Так что, когда вы попытаетесьзапустите сеанс в каком-либо произвольном классе, который вызывается в некоторой произвольной точке в потоке логики HTML / PHP; вероятность того, что что-то где-то уже отправлено в браузер.В основном вы теряете контроль.

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