【问题标题】:Unable to set Cookie using go lang无法使用 go lang 设置 Cookie
【发布时间】:2020-10-19 22:44:16
【问题描述】:

我尝试观看 this onethis link 等视频。非常相似的question here

我尝试了如下代码:

func articlesHandler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Access-Control-Allow-Origin", "*")
    w.Header().Set("Access-Control-Allow-Headers", "Content-Type,access-control-allow-origin, access-control-allow-headers")
    // var cookie, err = r.Cookie("session_id")
    // // cookie not set
    // if err != nil {
    expiration := time.Now().Add(365 * 24 * time.Hour)
    cookie := &http.Cookie{Name: "session_id", Value: "123123", Expires: expiration}
    http.SetCookie(w, cookie)
    // }
    if r.Method == http.MethodGet {
        articles := Articles{
            Article{Title: "Title 1", Desc: "Desc 1"},
            Article{Title: "Title 2", Desc: "Desc 2"},
        }
        query := r.URL.Query()
        fmt.Println("All Article ENdpoint Hit with ", query.Get("id"))
        json.NewEncoder(w).Encode(articles)
    }
    if r.Method == http.MethodPost {
        formData := r.FormValue
        fmt.Println("Post call ", formData("id"))
        json.NewEncoder(w).Encode("Success")
    }
}

我可以在 Response Header

中看到

但我仍然无法在我的开发工具中看到它 ---> 应用程序

因此,我的服务器无法检测到现有的cookie 值。请帮忙

【问题讨论】:

  • 大多数浏览器不允许在 localhost 上设置 cookie,也不允许在一个站点对另一个站点的响应中设置 cookie;您向 127.0.0.1:8080 发出请求,响应尝试在 localhost:4200 上设置 cookie。
  • @Adrian:这是否意味着我无法在 localhost 上测试与 cookie 相关的任何功能? :( 我在8080 上运行后端,在4200 上运行前端应用程序。有什么解决方法吗?
  • 您不能在localhost 上设置cookies,但您可以在127.0.0.1 或分配给您机器的任何其他IP 或您映射到主机文件中IP 的任何主机名上设置cookie。至于端口 - 您通常只能在使用 Set-Cookie 标头响应的主机上设置 cookie,包括端口。因此,如果您将单独的 cookie 与前端和后端关联,并且两者都无法读取/写入对方的 cookie。
  • 请使用 Max-Age 而不是 Expires。现在是 2020 年而不是 1990 年。
  • 这是一个 JavaScript 问题,不是 Go 的问题:developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/…

标签: angular go cookies


【解决方案1】:

如果您使用的是Angular,则可以选择创建代理并解决@Adrian 所说的问题。

  1. 在与package.json 相同的级别上创建proxy.conf.json。添加以下条目:
{
    "/articles": {
      "target": "http://127.0.0.1:8080",
      "secure": false
    }
}
  1. 现在,在angular 端进行更改以调用端点为
this.httpClient.get('/articles');
  1. 要么

ng 服务 --proxy-config proxy.conf.json

使用以下条目更新package.json

 "scripts": {
    "start": "ng serve --proxy-config proxy.conf.json",

然后做:

npm 开始

并使用http://127.0.0.1:4200/ 而不是http://localhost:4200

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-13
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多