2016-06-15 91 views
0

我刚开始使用fetch API按照ReactJS的建议发送我的数据。在此之前,要将API请求发送到我使用AngularJS的服务器。我目前遇到最烦人的错误,发送HTTP请求无法加载正确的会话。SessionID随每个HTTP请求而变化

首先,我的Web应用程序使用PHP API来公开自己,并且(现在基本上是)现在的一堆.php文件来获取应用程序的某些部分。其中之一是authenticateUser.php,它认证并存储会话。然而,我注意到我的HTTP请求fetch没有像预期的那样工作,getCurrentUser.php等其他内容返回NotLoggedIn,尽管只是验证。我认为它可能有一些做的会议,等等authenticateUser.php,我把我的.php文件输出的电流通过session_id验证后:(echo array('session_id' => session_id());

我注意到,基本上,当我自己加载自己的网址在浏览器中:myapp.com/php/http/user/authenticateUser.php,用fetchsession_id我得到的是一个我得到完全不同的:

return fetch("/php/http/user/authenticateUser.php", { 
    method: "post", 
    headers: { 
     'Content-Type': 'application/x-www-form-urlencoded' 
    } 
}).then(function(successResponse) { 
    return successResponse.json(); 
}, function(errorResponse) { 
    console.log(errorResponse); 
}).then(function(data) { 
    console.log(data); 
}); 

我进一步检查,也许认为这是因为fetch被查询http版本我的网站,而不是非-HTTP版本的我的网站。所以我改变了authenticateUser.php的逻辑,这样如果它检测到一个会话存在,它会打印出session_id,否则它会创建并打印出新的会话。每次我发送我的HTTP请求fetch我得到了不同的session_id,这意味着我的session_id随着每个请求而改变。这里是我使用的代码:

header("Content-Type: application/json"); 
if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 
http_response_code(200); 
echo json_encode(array('session_id' => session_id()),JSON_PRETTY_PRINT); 

我是否错过了与fetch API或头部完全不同的东西?或者有没有人有这方面的经验可能会启发我?

回答

1

答案是fetch默认情况下不发送cookie,你需要通过指定它:

credentials: same-origin