一.Cookie 简介

  • Cookie就是客户端存储技术.以键值对的形式存在
  • 在B/S架构中,服务器端产生Cookie响应给客户端,浏览器接收后把Cookie存在在特定的文件夹中,以后每次请求浏览器会把Cookie内容放入到请求中

二.Go语言对Cookie的支持

  • 在net/http包下提供了Cookie结构体

    • Name设置Cookie的名称
    • Value 表示Cookie的值
    • Path 有效范围
    • Domain 可访问Cookie 的域
    • Expires 过期时间
    • MaxAge 最大存活时间,单位秒
    • HttpOnly 是否可以通过脚本访问

      1. type Cookie struct {
      2. Name string
      3. Value string
      4. Path string // optional
      5. Domain string // optional
      6. Expires time.Time // optional
      7. RawExpires string // for reading cookies only
      8. // MaxAge=0 means no 'Max-Age' attribute specified.
      9. // MaxAge<0 means delete cookie now, equivalently 'Max-Age: 0'
      10. // MaxAge>0 means Max-Age attribute present and given in seconds
      11. MaxAge int
      12. Secure bool
      13. HttpOnly bool
      14. Raw string
      15. Unparsed []string // Raw text of unparsed attribute-value pairs
      16. }

      三.代码演示

  • 默认显示index.html页面,显示该页面时没有Cookie,点击超链接请求服务器后,服务端把Cookie响应给客户端,通过开发者工具(F12)观察整个过程.

    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    2. "http://www.w3.org/TR/html4/loose.dtd">
    3. <html>
    4. <head>
    5. <title></title>
    6. </head>
    7. <body>
    8. <a href="setCookie">产生Cookie</a>
    9. <a href="getCookie">获取Cookie</a>
    10. <br/>
    11. {{.}}
    12. </body>
    13. </html>
  • 服务器提供创建Cookie和获取Cookie的代码
  1. package main
  2. import (
  3. "net/http"
  4. "html/template"
  5. )
  6. func welcome(w http.ResponseWriter, r *http.Request) {
  7. t, _ := template.ParseFiles("view/index.html")
  8. t.Execute(w, nil)
  9. }
  10. func setCookie(w http.ResponseWriter, r *http.Request) {
  11. c := http.Cookie{Name: "mykey", Value: "myvalue"}
  12. http.SetCookie(w, &c)
  13. t, _ := template.ParseFiles("view/index.html")
  14. t.Execute(w, nil)
  15. }
  16. func getCookie(w http.ResponseWriter, r *http.Request) {
  17. //根据key取出Cookie
  18. //c1,_:=r.Cookie("mykey")
  19. //取出全部Cookie内容
  20. cs := r.Cookies()
  21. t, _ := template.ParseFiles("view/index.html")
  22. t.Execute(w, cs)
  23. }
  24. func main() {
  25. server := http.Server{Addr: ":8090"}
  26. http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static"))))
  27. http.HandleFunc("/", welcome)
  28. http.HandleFunc("/setCookie", setCookie)
  29. http.HandleFunc("/getCookie", getCookie)
  30. server.ListenAndServe()
  31. }