代码之家  ›  专栏  ›  技术社区  ›  Sam

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

  •  0
  • Sam  · 技术社区  · 8 年前

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

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

    当我发布登录表单时 fetch() 它起作用了。我的浏览器(包括火狐和Chrome)正确地设置了cookie,我可以“认证”。

    但是,当我通过 获取() 它没有 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);
    }
    

    这个 获取() 脚本处于最低限度,仅请求 body 和 method .我去掉了所有额外的头,看看是否有帮助。它没有:

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

    供参考:我用这个 PHPAuth 图书馆。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Luca Kiebel    8 年前

    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