SESSION не изменяется

245
03 января 2022, 02:20

Через fetch в файл сore.php отправляется action, который равен 'login', а так же email и epass.

вот содержимое core.php:

<?php 
    session_start();//session 
    cors(); 
 
    // auto load classes 
    spl_autoload_register(function ($class_name) { 
        include './classes/' . $class_name . '.php'; 
    }); 
 
    // what to choose  
    if(isset($_POST['action'])) $action = $_POST['action'];  
 
    $conn   = new Connect(); 
    $render = new Render($action); 
 
    switch ($action) { 
        case 'profile': 
            if(isset($_SESSION['authorization'])){ 
                $action = 'prof'; 
                echo $action; 
            }else{ 
                $action = 'login'; 
                echo $action; 
            } 
            // var_dump($_SESSION); -- array(0) 
            break; 
        case 'login': 
            $emailLogin   = $_POST['email']; 
            $passLogin    = $_POST['epass']; 
            $doLogin = new Login($emailLogin, $passLogin); 
            try { 
                $doLogin->login(); 
                // Если true 
                echo true; 
            } catch (Exception $e) { 
                echo $e->getMessage(); 
            } 
            break; 
    }  
 
    function cors() { 
        if (isset($_SERVER['HTTP_ORIGIN'])) { 
            header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}"); 
            header('Access-Control-Allow-Credentials: true'); 
            header('Access-Control-Max-Age: 86400'); 
        } 
 
        if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { 
 
            if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) 
                header("Access-Control-Allow-Methods: GET, POST, OPTIONS");          
 
            if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) 
                header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}"); 
        } 
    } 
?>

Здесь выполняется метод login();

Вот содержимое класса login

<?php 
    require_once('connect.php'); 
 
    class Login extends Connect{ 
        public function __construct($email, $pass){  
            $this->email = $email; 
            $this->pass = $pass; 
        } 
        public function login(){ 
            $conn = parent::conn(); 
 
            $userDB = $conn->query("SELECT mail FROM users WHERE mail = '$this->email'"); 
            if($userDB->num_rows == 1){ 
                $hash = $conn->query("SELECT password FROM users WHERE mail = '$this->email'"); 
                $hash = $hash->fetch_assoc(); 
                if(password_verify($this->pass, $hash['password'])){ 
                    $userId = $conn->query("SELECT userId FROM users WHERE mail = '$this->email'"); 
                    $userId = $userId->fetch_assoc(); 
                    $_SESSION['userId'] = $userId['userId']; 
                    $_SESSION['authorization'] = true; 
                    // var_dump($_SESSION); -- array(2) { 
                                                    // ["userId"]=> 
                                                    // string(2) "21" 
                                                    // ["authorization"]=> 
                                                    // bool(true) 
                                                // } 
                    return true; 
                }else throw new Exception('Неверный пароль'); 
            }else throw new Exception('Такой пользователь не найден'); 
        } 
    } 
?>

Здесь создается сессия, а потом она дампается, результат дампа виден в комментарии. Но проблема в том, что дамп сессии в файле core.php возвращает array(0)

Answer 1

Оказалось, что php не в чем не виноват, виноват js и его пароноик fetch, который не отправляется кукисы, чтобы это исправить нужно написать в опции fetch credentials: 'include' и всё!

READ ALSO
Проблема включения Apache в утилите MAMP

Проблема включения Apache в утилите MAMP

Во время нажатия кнопки Start Server загорается зеленый круг на Apache,через 1 секунду уже на MySQL,затем с Apache пропадает зеленый круг и остается только...

195
А нужны ли интерфейсы?

А нужны ли интерфейсы?

Делаю проект на архитектуре: controller ->service (use case) -> repository

206