我们打算在login.1234tv.com中为* .1234tv.com设置cookie。但它不起作用。
我已按如下方式配置容器:
beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
AllowAllOrigins: true,
AllowOrigins: []string{"http://*.1234tv.com"},
AllowMethods: []string{"GET", "POST", "PUT", "DELETE","PATCH","HEAD", "OPTIONS"},
AllowHeaders: []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Content-Type"},
ExposeHeaders: []string{"Content-Length", "Access-Control-Allow-Origin"},
AllowCredentials: true,
}))
并在控制器中设置cookie,如下所示:
this.Ctx.SetCookie("UNION_TOKEN", utoken, 3600*24*7,"/", ".1234tv.com",false,false)
答案 0 :(得分:0)
原因是set-cookie by response不起作用。 1.由于它是跨站点Ajax请求,。withCredentials()可以通过响应激活设置cookie的能力。
$.ajax( {
/* Setup the call */
xhrFields: {
withCredentials: true
}
});
2.在响应服务器一侧,“Access-Control-Allow-Credentials
”必须为“true
”,“Access-Control-Allow-Origin
”不得为“*
”和“访问 - Control-Allow-Origin“可以是”http://*.domain.com
“。
答案 1 :(得分:0)
我找到了解决这个问题的方法
beego.InsertFilter("*",beego.BeforeRouter,func(ctx *context.Context) {
ctx.ResponseWriter.Header().Add("Access-Control-Allow-Origin", "*")
ctx.ResponseWriter.Header().Add("Access-Control-Allow-Credentials", "true")
})
如果要在http中发送cookie,请使用“ http://XX”而不是“ *”,或者可以在API中单独设置“ Access-Control-Allow-Origin”,如下所示:
beego.InsertFilter("*",beego.BeforeRouter,func(ctx *context.Context) {
ctx.ResponseWriter.Header().Add("Access-Control-Allow-Origin", "*")
ctx.ResponseWriter.Header().Add("Access-Control-Allow-Credentials", "true")
})
func (c *ArticleController)AddArticle(){
c.Ctx.ResponseWriter.Header().Set("Access-Control-Allow-Origin", "http://XX")
}
$.ajax( {
...
xhrFields: {
withCredentials: true
}
});