php 会话重新启动并且不保存

问题描述

我是 PHP 新手。我有个问题。会话没有保存,但同时打开, session_status() 返回2,所以会话处于活动状态。我认为它每次都会重新创建,但同时它在“全局”不可见。因为每次(在 auth 之后) session_id() 都有另一个数字。请帮帮我。 该站点是使用 react 创建的。因此,所有请求都是通过 fetch 进行的。这是我的代码

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']));
}
?>

Router.PHP 接收请求并重定向到 requests.PHP函数

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,$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';
        }
      }
      
  }
?>

问题出在 authUser 函数中。我在注册后在 regUser 中初始化 $_SESSION["id"] ($_SESSION["id"] = $row["id"];) 但来自 authUser PHP 返回空变量。 我的提取请求:

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","4");

    fetch("http://myWebSite.com/loginForm",body: data
    })
      .then(res=>res.text())
      .then(
        (res) => console.log(res),(error) =>console.log("00")
      )
  }

我尝试使用其他字符获取这些代码,例如:凭据:“包含”,模式:“cors”但它不起作用..请帮帮我!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)