我相信我成功設置使用此Golang代碼片段一個cookie:
c = &http.Cookie{
HttpOnly: false,
Name: "_cas_cookie",
Value: newSessionID(),
MaxAge: 86400,
}
http.SetCookie(w, c)
其實,我可以使用瀏覽器檢查工具看到它。它也包含在每個「普通」瀏覽器點擊的請求標題中。但是,它並未包含在我發送的任何ajax查詢中。我使用了fetch()和jQuery的$ .ajax(),結果相同。根據設計,如果後端代碼沒有收到舊的代碼,它將生成一個具有相同名稱的新cookie。這就是發生的情況,並且新的cookie隨後將用於所有未來的ajax查詢。這幾乎就像http cookie和Javascript cookies存在於不同的域中一樣。我認爲將HttpOnly設置爲false會處理這個問題,但事實並非如此。
這裏是fetch()代碼。
function doGetFetch(url, callback){
fetch(
url,
{method: 'get',
credentials: 'same-origin'
})
.then(
function(response) {
if (response.status !== 200) {
console.log('Problem Status Code: ' +
response.status);
return false;
}
// Examine the text in the response
response.json().then(callback);
})
.catch(function(err) {
console.log('Fetch Error :-S', err);
});
}
進一步複雜性在於一切使用我的本地測試服務器工作正常,但是當我部署到生產服務器出現故障。兩者之間最大的區別是localhost使用Golang的內部Web服務器(例如http.ListenAndServer()),而製作使用CGI。
感謝任何關於新事物嘗試的指針!
這可能是一個跨域請求問題。也許生產CGI服務器上的Javascript認爲它在不同的域上,它在localhost上沒有這樣的問題。不過,我還不確定。 – Brent