javascript - 如何在每次提取中使用相同的 PHP 会话?
问题描述
我正在尝试使用 fetch 在 Javascript 中进行简单的身份验证,以将凭据发布到该文件内的 PHP 文件(login.php),它只是进行身份验证并将一些值添加到 $_SESSION 并在收到响应后立即调用另一个 get fetch 到( sessioninfo.php) 并且这个 php 文件只是返回 $_SESSION 用于测试目的,但我收到了一个空数组,即使我已经在 (sessioninfo.php) 和 (login.php) 中调用了 session_start()。
我尝试使用 axios 和 console.log 响应,每个响应都显示不同的 PHP 会话 ID,我认为这是 $_SESSION 为空的原因。
fetch("http://localhost/login.php/", {
method: 'POST',
body: JSON.stringify({username: 'test', password: 'test'})
})
.then(res => res.json())
.then(data => {
fetch("http://localhost/sessioninfo.php")
.then(res => res.json())
.then(data => console.log(data));
});
编辑:
登录.php
<?php
session_start();
header("Content-Type: application/json");
require_once "../../pdo.php";
/**
* @var PDO $pdo
*/
$data = json_decode(file_get_contents('php://input'), true);
$sql = "SELECT user_id from users WHERE username=:uname AND password=:pwd";
header("Content-Type: application/json");
$isInit = isset($data['username']) && isset($data['password']);
if($isInit) {
$stmt = $pdo->prepare(
$sql);
$stmt->execute(array(
':uname' => $data['username'],
':pwd' => $data['password']
));
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if($row != false) {
$sessionHash = hash('md5', $data['username'].$data['password'].$row['user_id']);
$_SESSION['ca'] = $sessionHash;
$_SESSION['user_id'] = $row['user_id'];
$response = array('isAuth' => true, 'user_id' => $row['user_id'], 'ca' => $sessionHash, 'session' => $_SESSION);
echo json_encode($response);
}
else {
$response = array('isAuth' => false);
echo json_encode($response);
}
}
else {
$response = array('message' => 'Missing input');
echo json_encode($response);
}
我认为 login.php 没有问题,因为我用正确的用户名和密码对其进行了测试,并返回了正确的响应
会话信息.php
<?php
session_start();
echo json_encode($_SESSION);
解决方案
推荐阅读
- laravel - Baum/Node - 从多个 id 获取后代
- c# - ASP.NET 标识 - 简化
- java - 无效令牌不包含资源 id (oauth2-resource)
- c - 如何优化此代码以缩短运行时间?
- mongodb - 用于海量数据的 MongoDB
- c++ - C++ 语法解释中的赋值运算符重载
- javascript - 回调被多次触发,我不知道为什么
- python - pip 已安装模块但 python 给出导入错误
- java - java opencv Features2d.drawMatches - 断言失败或 NullPointerException
- javascript - PHP 和 Vue 集成