[英]Fetch Api - how to send PHP SESSION data to the target PHP file?
我不明白为什么 Javascript Fetch API 固执地拒绝保留我的 PHP Z21ED6F47240CFBE215029。 这是一个最小的测试:
<?php
session_start();
$_SESSION['test'] = 'OK';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title></title>
</head>
<body>
<p>Origin session id is <?php echo session_id() ?></p>
<div id="target"></div>
<script>
fetch('data.php', {
method: 'get',
credentials: 'include'
}).then(response => response.text()).then((data) => {
document.getElementById('target').innerHTML = data;
}).catch(function (error) {
console.log(error);
});
</script>
</body>
</html>
<?php
session_start();
echo '<p>Target session id is ' . session_id() . '</p>';
if (empty($_SESSION)) {
echo '<p>session is empty</p>';
} else {
echo implode('<br>', $_SESSION);
}
Origin session id is abe10f9c611066f6400b2ce3d0ee8f97
Target session id is a68e76bf1d5180d79d27a2bcfa3c462c
session is empty
我发现了几个类似的问题/答案,但没有一个有帮助。 建议的解决方案是为 Credentials 选项提供“ include ”或“ same-site ”,但它们都不起作用。
我知道我可以通过 session ID 但如果可能的话想避免它。
谢谢你的帮助
服务器上是否启用了session.cookie_httponly
? 如果是这样,那将阻止 javascript 调用使用 cookie(一般来说 PHP 会话往往由 cookie 支持)。 在此设置的上下文中, http-only
意味着“ http
/ https
允许; javascript
/ webassembly
/...拒绝”。
您可能可以使用phpinfo();
查看当前值。 . 或在php.net上阅读更多相关信息。
我终于找到了问题的根源。 发生这种情况是因为我不在 SSL 中(我在本地主机上)并从我的 .htaccess 发送了这个 header:
Header always edit Set-Cookie (.*) "$1; Secure"
我首先用var_dump(session_get_cookie_params());
检查了我的 cookies 它返回["secure"]=> bool(false)
了解有用:
如果将 cookie 参数设置为 .htaccess,则在 PHP session_get_cookie_params()
中返回错误值
这是因为 function 正在读取 php.ini 值,而不是与 .htaccess 一起发送的值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.