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

时间:2018-06-08 19:42:41

标签: javascript php fetch

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

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

当我发布没有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。我删除了任何额外的标题,看看它是否会有所帮助。它没有:

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

供参考:我正在使用这个PHPAuth库。

1 个答案:

答案 0 :(得分:1)

默认情况下,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