Задать вопрос
@isgenderli

Почему сессия начинается каждый раз заново и она не сохраняется?

Я изучаю фронтед разработку. Создаю 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")
      )
  }
  • Вопрос задан
  • 185 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 2
@runapa
Скорее всего вы запускаете сессию каждый раз при обновлении страницы. Попробуйте проверку:
if(!isset($_SESSION['session_id']){
    session_start();
}
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Сессия - это куки.
Открываешь консоль разработчика, вкладка сеть, и смотришь, какую ку-ку тебе ставит пхп, какую посылает браузер.
Так можно будет хотя бы понять кто косячит.

Хотя конечно наиболее вероятная причина - Бом не даёт стартовать сессию, а ты этого не видишь потому что задавлены ошибки в пхп.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы