您的位置 首页 golang

Go语言Echo Web框架7-Cookie和Session

上一节:

Cookies

Cookie 并不是它的原意“甜饼”的意思, 而是一个保存在客户机中的简单的文本文件, 这个文件与特定的 Web 文档关联在一起, 保存了该客户机访问这个Web 文档时的信息, 当客户机再次访问这个 Web 文档时这些信息可供该文档使用。由于“Cookie”具有可以保存在客户机上的神奇特性, 因此它可以帮助我们实现记录用户个人信息的功能.

Cookies

Cookie是从网站服务器发送的一小段数据,并在浏览时存储在web浏览器中。每次用户加载网站时,浏览器都会将cookie发送回服务器,以通知服务器用户的最新状态。Cookies被设计为网站的状态信息。Cookies还可以存储用户先前输入的表单内容,例如用户名,年龄,地址等。

Cookie的属性,在此不做介绍,有兴趣可以网上搜索。

Echo使用go标准 http.Cookie 对象从handler函数的Context中添加或者获取文档。

创建Cookie

 func writeCookie(c echo.Context) error {
cookie := new(http.Cookie)
cookie.Name = "username"
cookie.Value = "value"
cookie.Expires = time.Now().Add(24 * time.Hour)
c.SetCookie(cookie)
return c.String(http.StatusOK, "write a cookie")
}  
  • 使用 new(http.Cookie) 创建Cookie
  • Cookie的属性赋值是给http.Cookie实例的公共属性赋值
  • 最后在HTTP响应中 c.SetCookie(cookie) 添加 Set-Cookie 标头

读取Cookie

 func readCookie(c echo.Context) error {
cookie, err := c.Cookie("username")
if err != nil {
return err
}
fmt.Println(cookie.Name)
fmt.Println(cookie.Value)
return c.String(http.StatusOK, "read a cookie")
}  
  • 使用 c.Cookie(“username”) HTTP请求中的名称读取Cookie
  • Cookie属性是通过 Getter 函数访问的

读取所有的Cookie

 func readAllCookies(c echo.Context) error {
for _, cookie := range c.Cookies() {
fmt.Println(cookie.Name)
fmt.Println(cookie.Value)
}
return c.String(http.StatusOK, "read all the cookies")
}  

使用 c.Cookies() 去读取所有的Cookie

Session

Session对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web页时,如果该用户还没有会话,则Web服务器将自动创建一个 Session对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。

Session

使用github.com/gorilla/sessions中间件来实现session管理。默认实现提供基于cookie和文件系统的会话存储。当然也可以自己实现。

依赖包

 import (
  "github.com/gorilla/sessions"
  "github.com/labstack/echo-contrib/session"
)  

用法

 e := echo.New()
e.Use(session.Middleware(sessions.NewCookieStore([]byte("secret"))))

e.GET("/", func(c echo.Context) error {
  sess, _ := session.Get("session", c)
  sess.Options = &sessions.Options{
    Path:     "/",
    MaxAge:   86400 * 7,
    HttpOnly: true,
  }
  sess.Values["foo"] = "bar"
  sess.Save(c.Request(), c.Response())
  return c.NoContent(http.StatusOK)
})  

自定义配置

用法

 e := echo.New()
e.Use(session.MiddlewareWithConfig(session.Config{}))  

配置

 Config struct {
  // Skipper defines a function to skip middleware.
  Skipper middleware.Skipper

  // Session store.
  // Required.
  Store sessions.Store
}  

默认配置

 DefaultConfig = Config{
  Skipper: DefaultSkipper,
}  

总结

(1)cookie以文本文件格式存储在浏览器中,而session存储在服务端它存储了限制数据量。

(2)单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session是无限量的

(3)cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗考虑到安全应当使用session。

(4)设置cookie时间可以使cookie过期。但是使用session-destory(),我们将会销毁会话。

(5) session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能考虑到减轻服务器性能方面,应当使用cookie。

cookie和session在web开发中还是常使用到的,根据开发需求不同可以选择不同的使用,cookie与session各有千秋。

文章来源:智云一二三科技

文章标题:Go语言Echo Web框架7-Cookie和Session

文章地址:https://www.zhihuclub.com/100610.shtml

关于作者: 智云科技

热门文章

网站地图