本文总结了有关浏览器Cookie的设置。前端使用Fetch API,后端使用Golang。
后端的配置
Golang代码如下
func handler(w http.ResponseWriter, r *http.Request) {
// do something
cookie := &http.Cookie{
Name: "key",
Value: "value",
Path: "/",
HttpOnly: true,
// Secure: true,
}
http.SetCookie(w, cookie)
// do something or return
}
这里特别注意,如果是生产环境一定要开启Secure,即强制使用https,如果不是https,cookie将不会被浏览器设置,自然也不会被发回服务器,但Cookie还是会被发送到浏览器。
如果有nginx管理cors的话,后端不再需要管理,否则可能冲突。
前端的配置
前端的js代码,如果是使用Fetch API,则需要开启credentials: 'include'
,因为Fetch默认既不发送Cookie,也不接受Cookie,这里是接受,而不是接收,因为Cookie可以返回到客户端,但是Cookie没被设置。
fetch('http://localhost:4000/user/login', {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
method: 'POST',
body: JSON.stringify(data),
mode: 'cors',
cache: 'no-cache',
redirect: 'follow',
credentials: 'include'
})
.then(...)
.catch(...)