我定义了两个处理程序函数setCookie和getCookie。 通过访问localhost:8080 / set_cookie来调用第一个函数setCookie,然后发送包含两个cookie的HTTP响应。 通过访问localhost:8080 / get_cookie调用另一个函数getCookie,然后获取Cookie对象。 我希望getCookie函数显示有关两个cookie的信息,但是在Web浏览器上会显示一条消息“ first_cookie未成功设置”。
您有解决这个问题的主意吗?
package main
import (
"fmt"
"net/http"
)
func setCookie(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "setCookie called")
c1 := http.Cookie{
Name: "first_cookie",
Value: "Go Web App",
HttpOnly: true,
}
c2 := http.Cookie{
Name: "second_cookie",
Value: "Another service",
HttpOnly: true,
}
http.SetCookie(w, &c1)
http.SetCookie(w, &c2)
}
func getCookie(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "getCookie called")
c1, err := r.Cookie("first_cookie")
if err != nil {
fmt.Fprintln(w, "first_cookie is not set successfully.")
}
ca := r.Cookies()
fmt.Fprintln(w, c1)
fmt.Fprintln(w, ca)
}
func main() {
server := http.Server{
Addr: "127.0.0.1:8080",
}
http.HandleFunc("/set_cookie", setCookie)
http.HandleFunc("/get_cookie", getCookie)
server.ListenAndServe()
}
答案 0 :(得分:4)
您的调试语句...
fmt.Fprintln(w, "setCookie called")
...发生在您的http.SetCookie
通话之前。
Cookie设置在标题中,但是通过写入http.ReponseWriter
,您触发了所有标题设置的完成。如果将调试语句移到setCookie
的最后一行,它将按预期运行。
您可以通过运行以下内容对其进行简单测试:
curl -v -c "cookie.jar" "http://localhost:8080/set_cookie"
更改前后。