命名 cookie 不存在

我正在建立一个网站,该网站将依赖 cookie 来处理各种事情。然后我决定有一个设置cookie然后读取相同cookie的功能,以查看浏览器是否允许cookie。但这失败了。


./views/index.html 中的模板


{{define "index"}}template{{end}}

主要代码:


package main


import (

    "fmt"

    "html/template"

    "log"

    "net/http"


    "strconv"

    "time"


    "github.com/gorilla/handlers"

    "github.com/gorilla/mux"

)


var tmpl *template.Template


func main(){

    port :=":8088"

    router := mux.NewRouter()

    router.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {

        //Set test cookie

        cookieName := strconv.FormatInt(time.Now().UnixNano(), 10)

        cookieValue := strconv.FormatInt(time.Now().UnixNano(), 10)


        fmt.Println("cookieName:" + cookieName)

        fmt.Println("cookieValue:" + cookieValue)

        cookie := http.Cookie{Name: cookieName, Value: cookieValue, Path: "/"}

        http.SetCookie(w, &cookie)


        //Get cookies

        fmt.Println("Range over cookies")

        for _, c := range r.Cookies() {

            fmt.Println(c)

        }


        //Get test cookie by name

        c, err := r.Cookie(cookieName)

        if err != nil {

            fmt.Println("Error: " + err.Error())

        } else {

            fmt.Println(c.Value)

        }



        err = tmpl.ExecuteTemplate(w, "index", "")

        if err != nil {

            http.Error(w, err.Error(), http.StatusInternalServerError)

        }

    })



    var err error

    tmpl, err = template.ParseGlob("views/*")

    if err != nil {

        panic(err.Error())

    }


    router.PathPrefix("/").HandlerFunc(func(res http.ResponseWriter, req *http.Request) {

        http.FileServer(http.Dir("./static/")).ServeHTTP(res, req)

    })


    fmt.Println("Server running on localhost" + port)


    err = http.ListenAndServe(port, handlers.CompressHandler(router))

    if err != nil {

        log.Fatal(err)

    }

}

这是终端输出:


Server running on localhost:8088

cookieName:1636243636497412077

cookieValue:1636243636497413613

Range over cookies

Error: http: named cookie not present

任何指向我的问题可能是什么?


海绵宝宝撒
浏览 111回答 2
2回答

明月笑刀无情

在将 cookie 发送到客户端之前,您正在检查 r.Cookies。您必须发送 cookie,然后如果您想检查他们的 cookie,请发送第二个请求。在您发送第一个响应后,打开浏览器并查看您的 cookie 是否存在会容易得多。

Qyouu

Request.Cookie方法从请求 Cookie标头中获取 cookie 。函数http.SetCookie将 Set-Cookie 标头添加到响应标头中。您可以使用以下代码观察 http.SetCookie 的结果: fmt.Println(w.Header()["Set-Cookie"])当前请求中不存在命名的 cookie,因为 http.SetCookie 不会修改当前请求。cookie 值的流程是这样的:服务器使用 Set-Cookie 标头在响应中设置 cookie。客户端将 cookie 存储在“cookie jar”中。客户端使用 Cookie 请求标头将 jar 中的匹配 cookie 添加到请求中。服务器从请求标头中获取 cookie。试试这个代码。在浏览器中加载页面并刷新以观察 cookie 值的流动。 const cookieName = "example"    cookieValue := strconv.FormatInt(time.Now().UnixNano(), 10)    fmt.Printf("Set cookie %s=%s\n", cookieName, cookieValue)    cookie := http.Cookie{Name: cookieName, Value: cookieValue, Path: "/"}    http.SetCookie(w, &cookie)    c, err := r.Cookie(cookieName)    if err != nil {        fmt.Printf("Get cookie %s error: %v\n", cookieName, err)    } else {        fmt.Printf("Get cookie %s=%s\n", cookieName, c.Value)    }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go