欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

使用cookie实现闪现消息

程序员文章站 2022-06-11 22:34:08
...
package main
import (
   "encoding/base64"
   "fmt"
   "net/http"
   "time"
)
func setMessage(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 showMessage(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))
   }
}
func main() {
   server := http.Server{
      Addr:"127.0.0.1:8080",
   }
   http.HandleFunc("/set_message", setMessage)
   http.HandleFunc("/show_message", showMessage)
   server.ListenAndServe()
}
showMessage函数的定义:

这个函数首先会尝试获取指定的cookie,如果没有找到该cookie,它就会把变量err设置成一个http.ErrNoCookie值,并向浏览器返回一条“No message found”消息。如果找到了这个cookie,那么它必须完成以下两个操作:
(1)创建一个同名的cookie,将它的MaxAge值设置为负数,并且将Expires值也设置成一个已经过去的时间;
(2)使用SetCookie方法将刚刚创建的同名cookie发送至客户端。
初看上去,这两个操作的目的似乎是要替换已经存在的cookie,但实际上,因为新cookie的MaxAge值为负数,并且Expires值也是一个已经过去的时间,所以这样做实际上就是要完全地移除这个cookie。在设置完新cookie之后,程序会对存储在旧cookie中的消息进行解码,并通过响应返回这条消息。

相关标签: CooKie的使用