Beego脱坑(九)Cookie和Session


title: Beego脱坑(九)Cookie和Session
tags: go,beego
author : Clown95


Cookie

1.Http是无状态的协议,服务器不能记录浏览器的访问状态,也就是服务器不能区分两次请求是否是来自同一个客户端。

2.Cookie实际上是服务器保存在浏览器上的一段信息,浏览器有了Cookie之后,每次向服务器发送请求都会带着该信息进行访问,服务器在收到请求之后,就可以通过该信息进行处理。

3.Cookie由服务器创建,并发给浏览器,最终由浏览器保存。

Cookie的用途

  1. 保持用户登陆状态
  2. 电商网站的购物车

设置Cookie

使用beego.Router()注册路由

beego.Router("/cookie",&controllers.CookieController{})

设置Cookie控制器以及Get方法

package controllers

import "github.com/astaxie/beego"

type CookieController struct {
    beego.Controller
}

func (this *CookieController)Get()  {
    if this.Ctx.GetCookie("user") ==""{  
        this.Ctx.SetCookie("user","admin")
        this.Ctx.WriteString("Cookie设置成功")
    }else{
        user:= this.Ctx.GetCookie("user")
        this.Ctx.WriteString("user="+user)
    }
}

运行结果

image

我们先通过GetCookie判断浏览器是否有Cookie ,如果没有就使用SetCookie设置,如果有就获取并输出。

  1. SetCookie 参数一为cookie的名称,参数二为cookie的值
  2. 设置Cookie是不能存在中文的,如果存在中文虽然可以设置成功,但是不能取出。

为Cookie设置存活时间

this.Ctx.SetCookie("user","admin",10)
  1. SetCookie的第三个参数是时间,单位是秒 。
  2. 如果不设置时间,Cookie只在本次回话有效,默认存活时间为3600秒

为Cookie设置路径

this.Ctx.SetCookie("user","admin",nil,"/cookie")
  1. 第三个参数是cookie的设置路径
  2. Cookie的路径是指告诉浏览器在访问那些网站的时候会带上该Cookie
  3. 我们访问的网站必须是Cookie保存路径的子集时才会带上相应的Cookie。
  4. 如果只想设置Cookie的保存路径而不想设置存活时间,可以在第三个参数中传递nil。

删除Cookie

beego中并没有删除Cookie的函数,但是我们可通过SetCookie把Cookie设为空值,即可达成删除的效果。

Cookie的缺点

  1. Cookie使用明文存储安全性差,可以直接查看浏览器获得。
  2. 可以在浏览器禁止Cookie,这样用户状态依然无法保存。
  3. Cookie作为请求或响应的报文进行发送,无形中增加了网络流量。
  4. 各个浏览器对Cookie有限制,大概只能保存每个网站的20个cookie。

Session

  1. Session是一段保存在服务器上的信息,当客户端第一次访问服务器时创建Session,同时也会创建一个名为beegosessionID,值为创建的Session的id的Cookie。
  2. 这个beegosessionID对应服务器中的一个Session对象,通过它就可以获取到保存用户信息的Session。
  3. Session 是服务器创建的,也是保存在服务器上。

开启Session

Beego默认关闭Session,如果想要使用Session,有两种方法:

1.在main 入口函数中添加代码

beego.BConfig.WebConfig.Session.SessionOn = true

2.在app.conf配置文件开启

sessionon=true

设置Session

package controllers

import "github.com/astaxie/beego"

type SessionController struct {
    beego.Controller
}

func (this *SessionController) Get() {
if this.GetSession("user") == nil {
        this.SetSession("user", "admin")
        this.Ctx.WriteString("Session设置成功!")
    }else {
        //获取session
        username := this.GetSession("user")
        fmt.Println("sessionid = ", this.CruSession.SessionID())
        this.Ctx.WriteString("user = " + username.(string))
    }
}

注册路由:

  beego.Router("/session" ,&controllers.SessionController{})

运行之后,我们通过浏览器可以查看到,创建了beegosessionID的Cookie


image
  1. GetSession返回值和GetCookie不一样,GetCookie返回的是空字符串,GetSession返回的是nil
  2. 设置Session的方法和设置Cookie的方法一样
  3. Session相比与Cookie 它可以存储中文数据
  4. 可以使用 this.CruSession.SessionID()获取当前的SessionID

设置返回客户端的cookie名称

现在我们已经知道Session返回给客户端Cookie的名称都是 beegosessionID ,那么我们可不可以改变它呢?跟开启Seesion一样有两种方法改变:

1.在main 入口函数中添加代码

beego.BConfig.WebConfig.Session.SessionName = "my_session"

2.在app.conf配置文件设置

#设置Session名字
sessionname=my_session

设置Session存活时间

Beego中的Session在当前会话默认存活3600秒,可以在主函数中或配置文件中设置Session的存活时间。

beego.BConfig.WebConfig.Session.SessionGCMaxLifetime =1000

设置返回客户端的Cookie的存活时间

我们可以在main 入口函数中添加代码来设置存活时间

beego.BConfig.WebConfig.Session.SessionCookieLifeTime =1000

删除Session

相比与Cookie,Session拥有两种删除函数:

1.删除指定的Session

this.DelSession("user")

2.删除所有Session

this.DestroySession()

演示代码:

func (this *SessionController) GetDelSession() {
    //DelSession和DestroySession的区别
    this.SetSession("username", "admin")
    this.SetSession("password", "123")
    //根据传递的session名称删除指定session
    //this.DelSession("username")
    //删除所有session
    this.DestroySession()
    username := this.GetSession("username")
    password := this.GetSession("password")
    if username != nil {
        fmt.Println("username = ", username)
    }
    if password != nil {
        fmt.Println("password = ", password)
    }
    this.Ctx.WriteString("删除完毕")
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容