我有一个简单的获取请求,如下所示:
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
的{{1}}不同的会话。我想知道是什么导致这个?为什么它会转储与我存储变量的会话不同的会话?
"user_id"
我正在存储的会话:session_id()
0q44kc1fkph8fkc8gt35gfabe6
:session_id()
所以......每次设置a493j3v5vbnlon02s1s7bpkqj3
时都会创建一个新会话?为什么呢?
答案 0 :(得分:1)
问题很可能在于您为会话启用了Cookie,并且Cookie生命周期为0.例如,让我们尝试将其设置为7天,而不是在脚本的开头:
ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);
如果这样做,我建议将session.cookie_lifetime
设置移到php.ini
文件中,这样您编写的每个脚本都不需要运行ini_set()
。