Через 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)
Оказалось, что php не в чем не виноват, виноват js и его пароноик fetch, который не отправляется кукисы, чтобы это исправить нужно написать в опции fetch
credentials: 'include'
и всё!
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Во время нажатия кнопки Start Server загорается зеленый круг на Apache,через 1 секунду уже на MySQL,затем с Apache пропадает зеленый круг и остается только...
Делаю проект на архитектуре: controller ->service (use case) -> repository