У меня есть простой запрос на выборку, который выглядит следующим образом:
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"
? Зачем?
Скорее всего, проблема заключается в том, что у вас включены 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
Других решений пока нет …