gpt4 book ai didi

javascript - 使用 fetch() 发布时未设置 Cookie

转载 作者:行者123 更新时间:2023-12-03 01:42:34 26 4
gpt4 key购买 nike

好吧,我遇到了一个相当奇怪的问题。

我正在为用户创建一个登录实例。

当我发布没有 fetch() 的登录表单时,它可以工作。我的浏览器(Firefox 和 Chrome)正确设置了 cookie,我可以“通过身份验证”。

但是,当我通过 fetch() 发送数据时,后端不会 setcookie()

注意:假设凭据正确。

这是我的 PHP 登录脚本

$user = htmlentities($_POST['username'], ENT_QUOTES);
$pass = htmlentities($_POST['password'], ENT_QUOTES);
$remember = isset($_POST['rememberme']) ? true : false;

$login = $PHPAuth['auth']->login($user, $pass, $remember);

/**
* $PHPAuth == [
* 'config' => PHPAuthConfig(),
* 'auth' => PHPAuth()
*/


if($login['error']) {
echo json_encode($login);
} else {
// create new cookie
setcookie(
$PHPAuth['config']->cookie_name,
$login['hash'],
$login['expire'],
'/', # path
'localhost', # domain
false, # HTTPS
true # HTTP-ONLY
);
echo json_encode($login);
}

fetch() 脚本处于最低限度,仅请求 bodymethod。我删除了所有额外的 header ,看看是否有帮助。但事实并非如此:

function postForm(url, data) {
return fetch(url, {
body: data,
method: 'post'
})
.then(response => response.json());
}

供引用:我正在使用这个PHPAuth图书馆。

最佳答案

默认情况下,fetch 不启用 cookie,您可以通过添加 credentials 选项并将其设置为 same-origin 来实现:

function postForm(url, data) {
return fetch(url, {
credentials: "same-origin",
body: data,
method: 'post'
})
.then(response => response.json());
}

了解有关 Request.credentials 的更多信息 at MDN .

关于javascript - 使用 fetch() 发布时未设置 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50767448/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com