Go设置cookie

Go语言中通过net/http包中的SetCookie来设置:
http.SetCookie(w ResponseWriter, cookie *Cookie)
w表示需要写入的response,cookie是一个struct,让我们来看一下cookie对象是怎么样的

  1. type Cookie struct {
  2. Name string
  3. Value string
  4. Path string
  5. Domain string
  6. Expires time.Time
  7. RawExpires string
  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. }

我们来看一个例子,如何设置cookie

  1. expiration := time.Now()
  2. expiration = expiration.AddDate(1, 0, 0)
  3. cookie := http.Cookie{Name: "username", Value: "astaxie", Expires: expiration}
  4. http.SetCookie(w, &cookie)

Go读取cookie

  1. cookie, _ := r.Cookie("username")
  2. fmt.Fprint(w,cookie)
  1. for _, cookie := range r.Cookies() {
  2. fmt.Fprint(w, cookie.Name)
  3. }

Go如何使用session

session创建过程

  • 生成全局唯一标识符(sessionid);
  • 开辟数据存储空间。一般会在内存中创建相应的数据结构,但这种情况下,系统一旦掉电,所有的会话数据就会丢失,如果是电子商务类网站,这将造成严重的后果。所以为了解决这类问题,你可以将会话数据写到文件里或存储在数据库中,当然这样会增加I/O开销,但是它可以实现某种程度的session持久化,也更有利于session的共享;
  • 将session的全局唯一标示符发送给客户端。

Go实现session管理

session管理设计

我们知道session管理涉及到如下几个因素

  • 全局session管理器
  • 保证sessionid 的全局唯一性
  • 为每个客户关联一个session
  • session 的存储(可以存储到内存、文件、数据库等)
  • session 过期处理

seesion管理留在框架中学习