我有一个小问题,我的PHP应用程序。我已经有一个会话管理工作,但有一个路由,我想访问与fetch从我的前面,似乎会话不工作。
这是我的文件/tracking.php
中的代码
session_start();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if($_POST['foo'] ?? false) {
$_SESSION["foo"] = $_POST['foo'];
}
else {
unset($_SESSION['foo']);
}
}
http_response_code(204);
die();
这是我从前面做的fetch:
const body = new FormData();
body.append('foo', "bar")
fetch(`/tracking`, {
credentials: "same-origin",
method: "POST",
body,
headers: { "Content-Type": "application/x-www-form-urlencoded" }
})
但是,当我在我的控制台的网络选项卡中观看时,请求没有做任何事情。预览是空白的,我从后面得到了200个答案,但会话没有保留。
所以,为了调试,我将tracking.php
修改为:
<?php
session_start();
var_dump($_POST["foo"]);
die();
但还是不行但是
1.如果我注解了session_start();
行,它就能正常工作,并按预期执行var_dump。
1.如果我修改前端发送一个表单而不是一个fetch(cf下一个块代码),它就能工作
const form = document.createElement('form')
form.method = "POST"
form.action = "/tracking"
form.innerHTML = `<input type="hidden" name="foo" value="bar">`
document.body.appendChild(form)
form.submit()
form.remove()
关键是我真的需要使用获取API,我不能执行表单发送,你知道为什么它不工作吗?
谢谢你的帮忙!
1条答案
按热度按时间wz3gfoph1#
我找到了我的答案:
问题不在于饼干,而在于取饼干!
我修改了我的代码,在fetch响应中添加了一些对答案的操作,现在它工作得很好!
现在我的代码看起来像这样:
它看起来工作正常。
我认为这是由于浏览器的东西?