使用cookie实现闪现消息

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中的消息进行解码,并通过响应返回这条消息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值