Cookies重新认知

2020-04-04  本文已影响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!

上一篇下一篇

猜你喜欢

热点阅读