【问题标题】:Cookie deleted after creation?Cookie 创建后删除?
【发布时间】:2019-12-01 23:57:19
【问题描述】:

我正在创建一个会话,创建会话/cookie 后它立即消失

session, err := r.Cookie("session-id")

if err != nil {
session = &http.Cookie{
                    Name:   "session-id",
                    Value:  sessionID.String(), //uuid
                    MaxAge: 0,
                }
http.SetCookie(w, session)
}

我不确定它是否被删除,但在创建 cookie 的那一刻,它会立即从 google chrome(应用程序/cookies)中消失。这是一个问题,因为我在转到另一条路径时无法检测到 cookie。

【问题讨论】:

    标签: go cookies session-cookies


    【解决方案1】:

    这是一个问题,因为我在转到另一条路径时无法检测到 cookie。

    如果设置cookie响应头中没有设置path参数,那么客户端将cookie的路径设置为请求路径。只有当 cookie 的路径是请求路径的路径前缀时,客户端才会向服务器发送 cookie。

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

    session = &http.Cookie{
                    Name:   "session-id",
                    Value:  sessionID.String(), //uuid
                    Path: "/",
                }
    

    (因为整数的零值为0,所以不需要指定MaxAge值)。

    【讨论】:

      【解决方案2】:

      根据MDN

      Max-Age:直到 cookie 过期的秒数。零或负数将立即使 cookie 过期

      查看SetCookie func 的源代码时,它调用cookie 的String() 方法,我们可以see in line 208 表明您的cookie 年龄为0 不会写入请求 - 您的cookie 应该被接受.

      可能还有其他因素可能使该 cookie 从用户代理端无效;服务器端似乎很好。当您尝试不同的浏览器(例如 Firefox)时会发生什么?

      【讨论】:

      • 这很奇怪,当我在边缘尝试它时它起作用了。 cookie 不会立即删除
      【解决方案3】:

      将 MaxAge 设置为 0 意味着立即删除 cookie。

      使用 -1 存储 cookie,直到浏览器退出。

      【讨论】:

      • 零值和负值会使 cookie 立即失效。
      • 我认为将其设置为 -1 意味着删除并将其设置为 0 是无限的时间。当我使用 -1 时,甚至没有创建 cookie。
      • @StormAsdg:不,阅读the docs。 0 和 RFC 6265,所有实现也是如此。
      • @Flimzy 所以你不能将它设置为无限?
      • @StormAsdg:不,you cannot
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 2012-01-18
      • 1970-01-01
      • 2012-01-29
      • 1970-01-01
      • 2012-12-27
      相关资源
      最近更新 更多