$_SESSION не сохраняется после запроса fetch
Есть такой код, который выполняется по запросу через fetch со включенным credentials: 'include'
<< ? php
//file core.php
session_start();
if(isset($_POST['action'])) $action = $_POST['action'];
switch ($action) {
case 'profile':
if (isset($_SESSION['authorization'])) {
$action = 'prof';
echo $action;
} else {
$action = 'login';
echo $action;
}
break;
case 'login':
$emailLogin = $_POST['email'];
$passLogin = $_POST['epass'];
$doLogin = new Login($emailLogin, $passLogin);
try {
$doLogin - > login();
var_dump($_SESSION);
// Если true
echo true;
} catch (Exception $e) {
echo $e - > getMessage();
}
break;
//file Login.php
class Login extends Connect {
public
function login($email, $pass) {
$conn = parent::conn();
$userDB = $conn - > query("SELECT mail FROM users WHERE mail = '$email'");
if ($userDB - > num_rows == 1) {
$hash = $conn - > query("SELECT password FROM users WHERE mail = '$email'");
$hash = $hash - > fetch_assoc();
if (password_verify($pass, $hash['password'])) {
$userId = $conn - > query("SELECT userId FROM users WHERE mail = '$email'");
$userId = $userId - > fetch_assoc();
$userName = $conn - > query("SELECT name FROM users WHERE mail = '$email'");
$userName = $userName - > fetch_assoc();
$_SESSION['userId'] = $userId['userId'];
$_SESSION['userName'] = $userName['name'];
$_SESSION['authorization'] = true;
return true;
} else throw new Exception('Неверный пароль');
} else throw new Exception('Такой пользователь не найден');
}
}
если интересно fetch:
// здесь происходит вход на сайт, создаётся сессия
let loginPost = {
'action': 'login',
'email': email,
'epass': epass
}
let bodyForLogin = new FormData();
for (let variable in loginPost) bodyForLogin.append(variable, loginPost[variable]);
fetch(phpPath, {
method: 'post',
mode: 'cors',
credentials: 'include',
body: bodyForLogin
}).then(response => {
return response.text();
}).then(res => {
console.log(res);
}
});
// здесь должно проверятся, есть ли сессия authorization
let profile = {
'action': 'profile'
}
let bodyProfile = new FormData();
bodyProfile.append('action', profile['action']);
return fetch(phpPath, {
method: 'post',
mode: 'cors',
credentials: 'include',
body: bodyProfile
}).then(response => {
return response.text();
}).then(res => {
// но сессия пучему-то пустой массив
console.log(res);
});
При дампе выводится массив с сессией с тремя значениями, как и должно быть.
При следующем запросе (вывести сессии) сессия пустая (тоже с credentials: 'include')
Раньше всё работало хорошо. Вчера установил библиотеку zeroMq, думал, что это из-за неё. Закомментировал в php.ini строчку extension=php_zmq.dll Но не помогло
**1.**Попробовал написать composer remove react/zmq не помогло
**2.**Протестировал на другом примере без всего лишнего, там всё работало, значит скорее всего дело не в расширении zmq
*3.*Убирал все сессии из папки, при первом запуске проверяется есть ли у меня сессия авторизации -- тогда создался пустой файл сессии. Потом я создаю сессию -- появляется один файл весом 1кб и с содержимым какое и должно быть. Потом у меня идет два обращения к core.php -- проверка авторизовался ли пользователь -- создаются два других пустых файла. вот скрин ibb.co/wYWm7Tz
**4.**Выводил session_id() в case login и profile - результат разный. В application почему-то всегда одинаковое айди. нашел вопрос ru.stackoverflow.com/questions/468530/… там говорится, что в session_id значения будут разные, и это правильная работа.
**5.**И еще там говорится про то, что нужно посмотреть set_cookie в консоли. Я у себя там нашел в path восклицательный знак ibb.co/SK0M7H4 ibb.co/fQb4NNz
**6.**Ещё я нашел в network, что у меня оказывается открыто соединение с websocket, хотя его я нигде не мог открыть! Он находится в состояние pedding, возможно. это и мешает. Хотя обращения к core.php у меня завершаются (200) -- скрин https://ibb.co/C8t7ZB8
Если нужно, то вот гитхаб с кодом github.com/Color-Kat
Ответы (1 шт):
Не знаю в чём проблема, но в хроме не работает. Проверил в FireFox - там работает Проверил в Canary - там работает
В хроме куки включены, на тестовом сайте всё работало. В чём проблема в хроме вообще не знаю