如何在beego框架中的子域之间共享cookie

时间:2018-05-28 11:49:51

标签: go beego

我们打算在login.1234tv.com中为* .1234tv.com设置cookie。但它不起作用。

enter image description here

我已按如下方式配置容器:

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)

2 个答案:

答案 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
   }
 });