我相信我成功设置使用此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