设置Cookie未被检测到

时间:2017-12-04 04:36:03

标签: go cookies

我遇到了一个问题,如果设置了cookie就试图检索它,如果不是,我想更新它然后检索它。

首先,我有一个设置cookie的函数:

func IndexHandler(w http.ResponseWriter, r *http.Request) {
    ...
    ck := http.Cookie{
        Name: "id",
        Value: 5,
        MaxAge: 60,
    }
}

然后在另一个函数中,我检查该cookie是否存在以及是否存在(抛出错误)然后重新创建它

func CheckUpdateCookie(w http.ResponseWriter, r *http.Request) {
    val, err := r.Cookie("id")
    if err != nil {
        ck := http.Cookie{
            Name: "id",
            Value: 5,
            MaxAge: 60,
        }

        http.SetCookie(w, &ck)
        CheckUpdateCookie(w, r)
    }
}

这导致它遇到无限循环并且没有意识到已经再次设置了cookie,如果我打印错误我得http: named cookie not present即使我已经在函数体中设置了cookie。 / p>

1 个答案:

答案 0 :(得分:3)

r.Cookie("id")的调用会在请求中读取“Cookie”标题。

http.SetCookie(w, &ck)的调用会在响应中添加“Set-Cookie”标头。该呼叫不会修改请求。

不是递归地调用函数来获取cookie(由于上述原因而无效),只需使用你手边的cookie:

func CheckUpdateCookie(w http.ResponseWriter, r *http.Request) {
    val, err := r.Cookie("id")
    if err != nil {
        val := &http.Cookie{
            Name: "id",
            Value: 5,
            MaxAge: 60,
        }
        http.SetCookie(w, val)
    }
    // val is now set to the cookie.
}

通常将路径设置为“/”,以便cookie可用于所有路径:

        val := &http.Cookie{
            Name: "id",
            Value: 5,
            MaxAge: 60,
            Path: "/",
        }