Go语言操作Cookie

454 次浏览次阅读
没有评论

GO 操作 Cookie

在日常开发中,经常会用到 Cookie 存储一些我们需要的信息。

Cookie 参数详解

参数 类型 含义
Name string cookie 的名称
Value string cookie 的值;value 值中不允许有空格符的存在,建议在设置时处理下
Path string Cookie 的使用路径。如果设置为“/sessionWeb/”,则只有 contextPath 为“/sessionWeb”的程序可以访问该 Cookie。如果设置为“/”,则本域名下 contextPath 都可以访问该 Cookie。注意最后一个字符必须为“/”。
Domain string 可以访问该 Cookie 的域名。如果设置为“.google.com”,则所有以“google.com”结尾的域名都可以访问该 Cookie。注意第一个字符必须为“.”
MaxAge int 被访问后的存活时间; 这个时间是个相对值(比如:3600s);MaxAge=0, 未指定该属性;MaxAge<0 时,删除 cookie,相当于“Max Age:0”
Expires time.Time Expires 是 cookie 的过期时间,如果不设置,那么这是一个 session 型的 cookie,即浏览器会话有用,一旦关闭浏览器,cookie 随即会被删除;Expires 指定的时间可以是相对文件的最后访问时间 (Atime) 或者修改时间(MTime); 比如 2018/10/10 10:10:10
RawExpires string 仅用于阅读 cookies
0Secure bool 是否需要安全传输,为 true 时只有 https 才会传输该 cookie
HttpOnly bool 为 true 时,不能通过 js 读取该 cookie 的值
Raw string
Unparsed []string 未解析的 attribute-value 属性位对

Cookie 的设置、读取、删除

package main

import (
    "io"
    "net/http"
)

//Cookie1Handler 方式一
func Cookie1Handler(w http.ResponseWriter, r *http.Request) {
    ck := &http.Cookie{
        Name:       "test-name",
        Value:      "hello",
        Path:       "/",
        Domain:     "localhost",
        MaxAge: 120,
    }

    http.SetCookie(w, ck)

    cookie, err := r.Cookie("test-name")
    if err != nil {io.WriteString(w, err.Error())
        return
    }

    io.WriteString(w, cookie.Value)
}

//Cookie2Handler 方式二
func Cookie2Handler(w http.ResponseWriter, r *http.Request)  {
    ck := &http.Cookie{
        Name:       "test-name2",
        Value:      "hello2",
        Path:       "/",
        Domain:     "localhost",
        MaxAge: 120,
    }

    w.Header().Set("set-cookie", ck.String())

    cookie, err := r.Cookie("test-name2")
    if err != nil {io.WriteString(w, err.Error())
        return
    }

    io.WriteString(w, cookie.Value)

}

//CookieClear 删除 Cookie
func CookieClear(w http.ResponseWriter, r *http.Request) {
    cookie := &http.Cookie{
        Name:       "test-name",
        Value:      "",
        Path:       "/",
        Domain:     "localhost",
        MaxAge: -1,
    }

    http.SetCookie(w, cookie)
}

func main() {http.HandleFunc("/cookie", Cookie1Handler)
    http.HandleFunc("/cookie2", Cookie2Handler)
    http.HandleFunc("/clear", CookieClear)

    http.ListenAndServe(":9999", nil)

}
正文完
 0
评论(没有评论)