问题描述
我是 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 (将#修改为@)