• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Go语言Cookie用法分析
    POST TIME:2021-10-18 17:40

    本文实例讲述了Go语言Cookie用法。分享给大家供大家参考,具体如下:

    web 开发免不了要和 cookie 打交道。Go 的 http 库也提供了 cookie 的相关操作。

    复制代码 代码如下:
    type Cookie struct {
      Name       string
      Value      string
      Path       string
      Domain     string
      Expires    time.Time
      RawExpires string
      MaxAge     int
      Secure     bool
      HttpOnly   bool
      Raw        string
      Unparsed   []string
    }

    Name 字段为 cookie 的名字,Value 是其值,剩下的 Path 和 Domain 则是 cookie 的存储的范围。Expires 是 cookie 的过期时间,如果不设置,那么这是一个 session 型的 cookie,即浏览器会话有用,一旦关闭浏览器,cookie 随即会被删除。

    设置 Cookie

    cookie 是 header 一项内容,因此可以使用 reponse 的 Header 方法设置 cookie。

    复制代码 代码如下:
    func setCookieHandler(w http.ResponseWriter, r *http.Request) {
        c1 := http.Cookie{
            Name: "first_cookie",
            Value: "vanyar",
            HttpOnly: true,
        }
        c2 := http.Cookie{
            Name: "second_cookie",
            Value: "noldor",
            HttpOnly:true,
        }
        w.Header().Set("Set-Cookie", c1.String())
        w.Header().Add("Set-Cookie", c2.String())
    }

    这里也可以测试验证 Set 和 Add 两个方法的差别。当然,和文件上传类似,Go 也提供了常用的工具函数。

    复制代码 代码如下:
    http.SetCookie(w, c1)
    http.SetCookie(w, c2)

    http 的 SetCookie 方法也可以设置 cookie,就不需要关系 Set 和 Add 的先后顺序了,当然第二个参数是一个 Cookie 的指针对象。设置了 cookie,接下来就是需要读 cookie。

    读取 Cookie

    读取 cookie 的方式也有很多,cookie 封装在header中,当然可以通过 header 方法处理。

    复制代码 代码如下:
    func getCookieHandler(w http.ResponseWriter, r *http.Request) {
        h := r.Header["Cookie"]
        fmt.Fprintln(w, h)
    }

    不使用 Header 方法,也可以使用 Request 的方法:

    复制代码 代码如下:
    func getCookieHandler(w http.ResponseWriter, r *http.Request) {
        c1, err := r.Cookie("first_cookie")
        if err != nil{
            fmt.Fprintln(w, "Cannot get cookie")
        }
        cs := r.Cookies()
        fmt.Fprintln(w, c1)
        fmt.Fprintln(w, cs)
    }

    访问的时候可以发现,r.Cookie 返回了对于 key 的键值对,而 r.Cookies 则返回了所有 cookie 的 key 的键值对值。

    Cookie 与 消息

    cookie 的作用很多,通常记录客户端的一些信息,用来做用户的登录验证。现在我们需要使用 cookie 来做一个小特性---消息。通常 web 请求发出后,response 返回数据,也可以设置一些消息用来指引用户。

    复制代码 代码如下:
    func setMessageHandler(w http.ResponseWriter, r *http.Request) {
        msg := []byte("Hello World")
        c := http.Cookie{
            Name: "flash",
            Value:base64.URLEncoding.EncodeToString(msg),
        }
        http.SetCookie(w, c)
    }
    func getMessageHandler(w http.ResponseWriter, r *http.Request) {
        c, err := r.Cookie("flash")
        if err != nil {
            if err == http.ErrNoCookie {
                fmt.Fprintln(w, "No message found")
            }
        } else {
            rc := http.Cookie{
                Name: "flash",
                MaxAge: -1,
                Expires:time.Unix(1, 0),
            }
            http.SetCookie(w, rc)
            val, _ := base64.URLEncoding.DecodeString(c.Value)
            fmt.Fprintln(w, string(val))
        }
    }

    setMessageHandler 函数很简单,就是创建一个 cookie 实例,然后把消息写入到 cookie,然后再返回给客户端。

    getMessageHandler 首先会读取 key 为 flash 的 cookie,如果没读到内容,则表示消息不存在,否则就创建另外一个 cookie,设置其过期时间这里等于清除 cookie。然后把读取出来的 message 返回给客户端。完成消息通信。

    总结

    我们讨论了 Go 中 cookie 的基本应用。现在的 web 开发中,人们越来越重视网络安全,因此 cookie 的安全也成为用户关心的内容。Go 原生的 cookie 封装比较简单。Go 的社区却开发了很多轮子,实现了secure cookie,例如 gorilla/securecookie 库。实际开发中,可能会借助一些三方的库或包来完成功能。

    希望本文所述对大家Go语言程序设计有所帮助。

    您可能感兴趣的文章:
    • Go语言中如何确保Cookie数据的安全传输
    上一篇:Golang slice切片操作之切片的追加、删除、插入等
    下一篇:Go语言实现的排列组合问题实例(n个数中取m个)
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信