реагировать — почему я не могу установить PHP $ _SESSION из запроса whatwg-fetch?

У меня есть простой запрос на выборку, который выглядит следующим образом:

fetch('/includes/signon.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
Email: event.target.form.email.value,
Password: event.target.form.password.value,
})
})
.then((response) => {
return response.text()
}).then((body) => {
this.displayWelcomeMessage(body);
})

А на бэкэнде у меня есть PHP, который обрабатывает запрос на выборку так:

<?php
require_once('database.php');
session_start();

$request_body = file_get_contents('php://input');
$json = json_decode($request_body);

if (!empty($json->Email) && !empty($json->Password)) {
global $db, $json;
$sql = "SELECT `user_id` from users where email = ? AND password = ?;";
$stmt = $db->initialize_statement();
if (!$stmt->prepare($sql)) {
$error = $stmt->error;
echo $stmt->error;
} else {
$email = $json->Email;
$password = $json->Password; // Stored as a string for the sake of simplicity
$stmt->bind_param('ss', $email, $password);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($result);
while($stmt->fetch()) {
if ($stmt->num_rows === 0) {
echo "Incorrect Username or Password";
} else {
// Here lies the problem...
$_SESSION['user_id'] = $result;
echo "Welcome, User #".$result."!";
}
}
$stmt->close();
}
} else {
var_dump($_SESSION); // For debugging purposes only
}

Теперь вот проблема! В теле ответа отображается «Добро пожаловать, пользователь № 12!» когда я захожу как надо, но $_SESSION['user_id'] установлен в 12 без сохранения в реальном сеансе …

Если я сделаю запрос GET на страницу, он выдает $_SESSION и $_SESSION['user_id'] нигде не найти

Зачем? Что я делаю неправильно? Я просто хочу закончить этот проект …

ОБНОВИТЬ: var_dump($_SESSION); в нижней части страницы дамп другой сессии, чем $_SESSION что я использую для хранения "user_id", Интересно, что вызывает это? Почему он создает дамп сеанса, отличного от того, в котором я храню переменные?

session_id() на сессии я храню: 0q44kc1fkph8fkc8gt35gfabe6

session_id() на сессии я сбрасываю: a493j3v5vbnlon02s1s7bpkqj3

Итак … Он создает новую сессию каждый раз, когда я устанавливаю "user_id"? Зачем?

1

Решение

Скорее всего, проблема заключается в том, что у вас включены cookie-файлы для сеансов, а срок действия файлов cookie равен 0. Например, давайте попробуем сделать это 7 дней вместо этого в начале вашего сценария:

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);

Если это работает, я бы порекомендовал перенести session.cookie_lifetime установка на ваш php.ini файл, поэтому каждый сценарий, который вы пишете, не требует запуска ini_set(),

Для дополнительной информации: https://stackoverflow.com/a/9797962/823549

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]