2016-06-15 118 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