我不明白為什么 Javascript Fetch API 頑固地拒絕保留我的 PHP 會話。這是一個最小的測驗:
加載器.php
<?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:
<?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 ”,但它們都不起作用。
我知道我可以傳遞會話 ID,但如果可能的話,我想避免它。
謝謝你的幫助
uj5u.com熱心網友回復:
是否session.cookie_httponly在服務器上啟用?如果是,那將阻止 javascript 呼叫使用 cookie(一般來說 PHP 會話往往由 cookie 支持)。在此設定的情況下,http-only意味著“ http/https允許的; javascript/ webassembly/ ...被拒絕”。
您可能可以使用 來查看當前值phpinfo();。或在php.net上閱讀更多相關資訊。
uj5u.com熱心網友回復:
我終于找到了問題的根源。發生這種情況是因為我不在 SSL(我在本地主機上)并從我的 .htaccess 發送了這個標頭:
Header always edit Set-Cookie (.*) "$1; Secure"
我首先檢查了我的 cookie,var_dump(session_get_cookie_params());然后它回傳了["secure"]=> bool(false)
有用的知識:
session_get_cookie_params()如果 cookie 引數設定為 .htaccess ,PHP 會回傳錯誤的值
這是因為該函式正在讀取 php.ini 值,而不是使用 .htaccess 發送的值
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/384699.html
標籤:javascript php 会议 拿来 获取-api
