Как использовать один и тот же сеанс PHP при каждой выборке?

#javascript #php #session #fetch

#javascript #php #сеанс #выборка

Вопрос:

Я пытаюсь выполнить простую аутентификацию в Javascript, используя выборку для отправки учетных данных в файл PHP (login.php ) внутри этого файла он просто аутентифицируется и добавляет некоторые значения в $_SESSION, и после получения ответа я немедленно вызываю другую выборку get для (sessioninfo.php ) и этот php-файл просто возвращает $_SESSION дляв целях тестирования, но я получил пустой массив, хотя я уже вызвал session_start() в (sessioninfo.php ) и (login.php ).

Я пробовал использовать axios и console.регистрируйте ответ, и каждый ответ показывает другой идентификатор сеанса PHP, который, я думаю, является причиной того, почему $_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));
});  

Отредактировано:

login.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']) amp;amp; 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 потому что я протестировал его с правильным именем пользователя и паролем и вернул правильный ответ

sessioninfo.php

 <?php
session_start();

echo json_encode($_SESSION);  

Комментарии:

1. Пожалуйста, покажите, что именно делает PHP. Это должно сработать, действительно.

2. Хорошо, я уже добавил файлы php

3. Здесь ошибка SQL-инъекции.