为了账号安全,请及时绑定邮箱和手机立即绑定

如何读取cookie?

如何读取cookie?

Go
白板的微信 2023-06-01 17:13:03
我从 javascript 中设置了一个 cookie,例如:setCookie("appointment", JSON.stringify({                appointmentDate: selectedDay.date,                appointmentStartMn: appointment.mnRange[0],                appointmentId: appointment.id || 0,                appointmentUserId: appointment.user.id || 0          }));设置 cookie 后,我想将用户重定向到预订页面:window.location.href = "https://localhost:8080/booking/"setCookie 函数:function setCookie(cookieName, cookieValue) {    document.cookie = `${cookieName}=${cookieValue};secure;`;}我想从我的 go 后端检索那个 cookie,但我不知道该怎么做。我读过这个问题,因为我以前从未使用过 cookie,但答案似乎告诉我除了设置 document.cookie 之外我不需要做太多事情。在我的浏览器存储中,我可以看到 cookie 确实按预期设置了。在我的 Go 后端,我想打印 cookie:r.HandleFunc("/booking/", handler.serveTemplate)func (handler *templateHandler) serveTemplate(w http.ResponseWriter, r *http.Request) {    c, err := r.Cookie("appointment")    if err != nil {        fmt.Println(err.Error())    } else {        fmt.Println(c.Value)    }}//output http: named cookie not present我缺少的具体内容是什么?我想我混淆了 local/http cookie 但如何实现客户端设置 cookie 的读取?更新(更多信息请参见答案)它与golang无关。我的:appointmentDate: selectedDay.date格式化为2019-01-01和-不是可以发送到后端的有效字符。它适用于我的浏览器,但需要对 URI 进行编码才能传递。所以这成功了:`${cookieName}=${encodeURIComponent(cookieValue)};secure;` + "path=/";`然后开始(为了节省空间没有在这里发现错误):cookie, _ := r.Cookie("appointment")data, _ := url.QueryUnescape(cookie.Value)
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

例如,更好的方法是将您的 json 编码为 base64。我做了一个工作示例...


主程序


package main


import (

    "encoding/base64"

    "encoding/json"

    "fmt"

    "io"

    "io/ioutil"

    "net/http"

)


// Contains everything about an appointment

type Appointment struct {

    Date    string `json:"appointmentDate"`    // Contains date as string

    StartMn string `json:"appointmentStartMn"` // Our startMn ?

    ID      int    `json:"appointmentId"`      // AppointmentId

    UserID  int    `json:"appointmentUserId"`  // UserId

}


func main() {

    handler := http.NewServeMux()


    // Main request

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

        fmt.Printf("Requested /\r\n")


        // set typical headers

        w.Header().Set("Content-Type", "text/html")

        w.WriteHeader(http.StatusOK)


        // Read file

        b, _ := ioutil.ReadFile("index.html")

        io.WriteString(w, string(b))

    })


    // booking request

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

        fmt.Printf("Requested /booking/\r\n")


        // set typical headers

        w.Header().Set("Content-Type", "text/html")

        w.WriteHeader(http.StatusOK)


        // Read cookie

        cookie, err := r.Cookie("appointment")

        if err != nil {

            fmt.Printf("Cant find cookie :/\r\n")

            return

        }


        fmt.Printf("%s=%s\r\n", cookie.Name, cookie.Value)


        // Cookie data

        data, err := base64.StdEncoding.DecodeString(cookie.Value)

        if err != nil {

            fmt.Printf("Error:", err)

        }


        var appointment Appointment

        er := json.Unmarshal(data, &appointment)

        if err != nil {

            fmt.Printf("Error: ", er)

        }


        fmt.Printf("%s, %s, %d, %d\r\n", appointment.Date, appointment.StartMn, appointment.ID, appointment.UserID)


        // Read file

        b, _ := ioutil.ReadFile("booking.html")

        io.WriteString(w, string(b))

    })


    // Serve :)

    http.ListenAndServe(":8080", handler)

}


索引.html


<html>

    <head>

        <title>Your page</title>

    </head>

<body>

    Setting cookie via Javascript


    <script type="text/javascript">

    window.onload = () => {

        function setCookie(name, value, days) {

            var expires = "";

            if (days) {

                var date = new Date();

                date.setTime(date.getTime() + (days*24*60*60*1000));

                expires = "; expires=" + date.toUTCString();

            }

            document.cookie = name + "=" + btoa((value || ""))  + expires + "; path=/";

        }


        setCookie("appointment", JSON.stringify({

                    appointmentDate: "20-01-2019 13:06",

                    appointmentStartMn: "1-2",

                    appointmentId: 2,

                    appointmentUserId: 3

            })

        );


        document.location = "/booking/";

    }

    </script>

</body>

预订.html


<html>

    <head>

        <title>Your page</title>

    </head>

<body>

    Your booking is okay :)

</body>


查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 146 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信