如何保持cookie的价值

cos*_*lti 1 go

我正在我的应用程序中进行用户身份验证,这是通过 jwt 保存的 cookie 完成的,当我发出请求时,客户端获取 cookie 没有问题,但是当客户端更新页面或仅 f5 时,cookie 被删除,我正在调查它是否发生在本地主机上或我的代码中是否存在问题,但我没有找到与我的问题相关的任何内容。这是我在 Go 中的代码:

func Login(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Content-Type", "application/json")

    u := model.User{}
    if err := json.NewDecoder(r.Body).Decode(&u); err != nil {
        http.Error(w, "format incorrect", http.StatusBadRequest)
        return
    }

    user, equals, err := u.AccessControll(u.Email, u.Password)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    if !equals {
        http.Error(w, "ups", http.StatusBadRequest)
        return
    }

    token, err := jwt.CreateToken(user)
    if err != nil {
        http.Error(w, err.Error(), http.StatusBadRequest)
        return
    }

    cookie := http.Cookie{
        Name:     "token",
        Value:    token,
        Expires:  time.Now().Add(5 * time.Minute),
        HttpOnly: true,
    }

    http.SetCookie(w, &cookie)
}
Run Code Online (Sandbox Code Playgroud)

Cer*_*món 5

浏览器默认 cookie 路径为请求路径。如果 cookie 路径不是请求路径的路径前缀,则浏览器不会发送 cookie。问题中的 cookie 仅针对对登录处理程序路径及其下方路径的请求设置。

将 cookie 路径设置为“/”以使 cookie 可用于所有路径。

这可能是无关的,但最好设置 MaxAge 而不是 Expires,因为 MaxAge 不受时钟偏差的影响。

cookie := http.Cookie{
    Name:     "token",
    Value:    token,
    Path:     "/",
    MaxAge:   5 * 60,
    HttpOnly: true,
}
Run Code Online (Sandbox Code Playgroud)