Я изучаю фронтед разработку. Создаю spa на реакте. Возникла проблема с сессией. Код работал, но вдруг перестал работать. Уже 2 недели ломаю голову над тем, чтобы найти ошибку, но получается. Проблема в следующим: Сессия не сохраняется. А каждый раз заново начинает. Я в этом убедился по двум причинам.
session_start() из любого запроса возвращает 2, а также разные
session_id(). Прощу мне помочь . Мой код:
router.php
<?php
session_start();
header("Access-Control-Allow-Origin : *");
header("Access-Control-Allow-Credentials",true);
require_once('db.php');
require_once('Requests.php');
$uri = explode("/",$_SERVER['REQUEST_URI']);
if($uri[1] == "registrationForm"){
exit(Requests::regUser($_POST['userFullName'],$_POST['userLocation'],$_POST['userEmail'],$_POST['userPassword']));
}
else if($uri[1] == "loginForm"){
exit(Requests::authUser($_POST['userEmail'],$_POST['userPassword']));
}
?>
- принимает запросы и перенаправляет на функции из
requests.php:
<?php
class Requests{
static function regUser($userFullName,$userLocation,$userEmail,$userPassword){
global $mysqli;
$userEmail = mb_strtolower(trim($userEmail));
$userPassword = password_hash(trim($userPassword), PASSWORD_DEFAULT);
$stmt = $mysqli->prepare("SELECT * FROM `users` WHERE `userEmail`=?");
$stmt ->bind_param("s",$userEmail);
$stmt->execute();
$result = $stmt->get_result();
$row=$result->fetch_assoc();
$stmt->close();
if($result->num_rows){
return 'exist';
}else{
$stmt = $mysqli->prepare("INSERT INTO `users`(`userFullName`, `userLocation`, `userEmail`, `userPassword`) VALUES (?,?,?,?)");
$stmt->bind_param("ssss",$userFullName,$userLocation,$userEmail,$userPassword);
$stmt->execute();
$stmt->close();
$stmt = $mysqli->prepare("SELECT * FROM `users` WHERE `userEmail` = ?");
$stmt->bind_param("s",$userEmail);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$stmt->close();
$_SESSION["id"] = $row["id"];
session_write_close();
return $_SESSION["id"];
}
}
static function authUser($userEmail,$userPassword){
global $mysqli;
$userEmail = mb_strtolower(trim($userEmail));
$userPassword = trim($userPassword);
$stmt = $mysqli->prepare("SELECT * FROM `users` WHERE `userEmail` = ?");
$stmt->bind_param("s",$userEmail);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$stmt->close();
if(isset($row["userEmail"])){
if(password_verify($userPassword,$row["userPassword"])){
return $_SESSION["id"];
}else{
return "false";
}
}else{
return 'false double';
}
}
}
?>
Запросы я делаю с помощью fetch:
function registr(event){
event.preventDefault();
const data = new FormData();
data.append("userFullName","Sinan Isgenderli");
data.append("userLocation","sinanLand");
data.append("userEmail","testmest6@gmail.ru");
data.append("userPassword","4");
fetch("http://myWebSite.com/registrationForm",{
method: 'POST',
mode: 'cors',
cache: 'default',
credentials:"same-origin",
body: data
})
.then(res=>res.text())
.then(
(res) =>console.log(res),
(error) =>console.log(error)
)
}
function login(event){
event.preventDefault();
const data = new FormData();
data.append("userEmail","testmest6@gmail.ru");
data.append("userPassword","4");
fetch("http://myWebSite.com/loginForm",{
method: 'POST',
credentials:"same-origin",
body: data
})
.then(res=>res.text())
.then(
(res) => console.log(res),
(error) =>console.log("00")
)
}