我正在嘗試$.post()通過本機fetch()函式重寫我的 JQuery代碼。似乎使用 PHP 服務器代碼的唯一方法是使用file_get_contents("php://input"). 我這樣做就像在這里和這里顯示的一樣:
js代碼:
fetch('/myscript.php', {
method: 'post',
mode: "same-origin",
credentials: "same-origin",
body: JSON.stringify({par1:par1, par2:par2})
}).then(response => response.text())
.then(output => {
// do stuff
});
我的腳本.php:
$input = json_decode(file_get_contents('php://input'), true);
// do stuff with $input['par1'], $input['par2']
echo $output;
有兩件事讓我擔心:
該專案有不止一個這樣的 fetch 呼叫。如果使用兩個不同的 php 腳本檔案同時呼叫兩個 fetch 函式會怎樣?他們都將同時訪問
php://input。不會引起沖突嗎?通過這行代碼,
$.post()我能夠檢查是否myscript.php沒有被黑客直接呼叫:if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') die('Hack attempt!');但
$_SERVER['HTTP_X_REQUESTED_WITH']由于某種原因,新方法未定義。有沒有辦法確保myscript.php使用 fetch 呼叫或php://input自動確保它?fetch是非常現代的功能,但json_decode(file_get_contents('php://input'), true)看起來很奇怪并且用于其他用例。沒有更好的方法從基于 php 的服務器獲取資料嗎?
uj5u.com熱心網友回復:
- 否。每個腳本呼叫都有自己的
php://input. - 那如何檢查它是否被黑客呼叫?沒有什么可以阻止黑客發送該標頭。但是如果你真的想要它,你可以自己添加標題(這是黑客會做的):
fetch('/myscript.php', {
method: 'post',
mode: "same-origin",
headers: {"X-Requested-With": "XMLHttpRequest"},
credentials: "same-origin",
body: JSON.stringify({par1:par1, par2:par2})
}).then(response => response.text())
.then(output => {
// do stuff
});
- 您可以發送 url 編碼的引數而不是 JSON。然后 PHP 會將它們決議
$_POST為正常形式。
fetch('/myscript.php', {
method: 'post',
mode: "same-origin",
headers: {
"X-Requested-With": "XMLHttpRequest",
"Content-type": "application/x-www-form-urlencoded"
},
credentials: "same-origin",
body: `par1=${encodeURIComponent(par1)}&par2=${encodeURIComponent(par2)}`
}).then(response => response.text())
.then(output => {
// do stuff
});
uj5u.com熱心網友回復:
- 每個新行程都會得到一個單獨的“輸入”,不存在沖突的風險。
- 你想要 CSRF 令牌。任何人都可以發送 XMLHttpRequest
- 你在比較橙子和蘋果。php://input 沒問題。
php://輸入檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/345973.html
標籤:javascript php 异步 拿来
上一篇:javascript。ajax呼叫后如何傳遞“this”物件?[復制]
下一篇:在遞回函式中如何呼叫原始承諾決議
