簡體   English   中英

獲取 Api - 如何將 PHP SESSION 數據發送到目標 Z2FEC392304A5C23AC138DA27 文件?

[英]Fetch Api - how to send PHP SESSION data to the target PHP file?

我不明白為什么 Javascript Fetch API 固執地拒絕保留我的 PHP Z21ED6F47240CFBE215029。 這是一個最小的測試:

loader.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 ”,但它們都不起作用。

我知道我可以通過 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM