美文网首页
Cookies重新认知

Cookies重新认知

作者: 小艾咪 | 来源:发表于2020-04-04 18:49 被阅读0次

    以前对与Cookies的概念比较模糊,只知道大家通常用来记录用户信息。平时使用也只是在浏览器端当作一个全局存储器来用,其实连用都没怎么用过emm。趁着放假花些时间来做个简单的实验并记录下来,以供日后查阅。

    首先先对cookies浏览器端、服务端收发机制做一个简单的了解。

    1.浏览器向服务端发送请求
    2.服务端接收到请求并设置cookie值后返回请求资源
    3.浏览器收到请求资源并将服务端设置的cookie值存储到浏览器cookies中
    4.浏览器再次发起请求并附带上一次服务端设置的cookie值(附带cookie值的操作由浏览器自动执行无需开发者手动设置)
    5.服务端根据cookie值做相应逻辑处理

    Ok,废话少说马上进入实验。
    首先搭建服务端。使用Go语言编写一个简单的http服务器。初始代码如下。

    package main
    
    import (
        "fmt"
        "net/http"
        "time"
    )
    
    func main() {
        http.HandleFunc("/get", handle)
        http.ListenAndServe(":53055", nil)
    }
    
    func handle(w http.ResponseWriter, r *http.Request) {
        cookies := r.Cookies()
        fmt.Print("cookies:")
        fmt.Println(cookies)
        w.Write([]byte("success"))
        for _, temp := range cookies {
            w.Write([]byte("cookie:"+temp.Value))
        }
    }
    

    可以看到当前代码的主要功能是当请求到来时打印请求所携带的cookie值,并将cookie值以文本方式返回到前台。
    现在打开浏览器访问该地址



    可以看到请求访问成功了,并且无论怎么刷新cookie值都为空。后台打印结果



    现在修改后台代码为请求附加cookie值,修改完成后的后台代码
    package main
    
    import (
        "fmt"
        "net/http"
        "time"
    )
    
    func main() {
        http.HandleFunc("/get", handle)
        http.ListenAndServe(":53055", nil)
    }
    
    func handle(w http.ResponseWriter, r *http.Request) {
        cookies := r.Cookies()
        fmt.Print("cookies:")
        fmt.Println(cookies)
        cookie:=&http.Cookie{Name:"wxm",Value:"530",Path:"/",Domain:"localhost",Expires:time.Now().AddDate(1,1,1),RawExpires:"/",MaxAge:600000000,HttpOnly:false,Secure:false,}
        http.SetCookie(w,cookie)
        w.Write([]byte("success"))
        for _, temp := range cookies {
            w.Write([]byte("cookie:"+temp.Value))
        }
    }
    

    按照之前的解释来说浏览器的第一次请求不附带任何cookie信息。则返回结果应与上面的结果相同。现在开始测试(注意别请求多了哦)

    浏览器第一次发起请求

    虽然返回结果相同但注意右侧cookie信息已经正确的存储到了浏览器cookies中。
    后台控制台


    后台打印结果

    接下来发起第二次请求,理论上来说浏览器会自动将cookie信息附加到请求当中。则后台将会通过for _, temp := range cookies { w.Write([]byte("cookie:"+temp.Value)) }该段代码将cookie信息返回给前台。

    发起第二次请求
    可以看到符合预期(忘换行了,结果都在一行上(⊙﹏⊙))。前台成功打印了cookie信息

    后台打印结果为


    后台打印信息

    为什么常识性的东西我却不知道呢emmm!

    相关文章

      网友评论

          本文标题:Cookies重新认知

          本文链接:https://www.haomeiwen.com/subject/pbxpphtx.html