Beego脱坑(九)Cookie和Session

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

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

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

Cookie的用途
保持用户登陆状态
电商网站的购物车
设置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)
    }
}
运行结果 

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

SetCookie 参数一为cookie的名称,参数二为cookie的值
设置Cookie是不能存在中文的,如果存在中文虽然可以设置成功,但是不能取出。 
为Cookie设置存活时间
this.Ctx.SetCookie("user","admin",10)
SetCookie的第三个参数是时间,单位是秒 。
如果不设置时间,Cookie只在本次回话有效,默认存活时间为3600秒  
为Cookie设置路径 
this.Ctx.SetCookie("user","admin",nil,"/cookie")
第三个参数是cookie的设置路径
Cookie的路径是指告诉浏览器在访问那些网站的时候会带上该Cookie
我们访问的网站必须是Cookie保存路径的子集时才会带上相应的Cookie。
如果只想设置Cookie的保存路径而不想设置存活时间,可以在第三个参数中传递nil。
删除Cookie
beego中并没有删除Cookie的函数,但是我们可通过SetCookie把Cookie设为空值,即可达成删除的效果。

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

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

GetSession返回值和GetCookie不一样,GetCookie返回的是空字符串,GetSession返回的是nil
设置Session的方法和设置Cookie的方法一样
Session相比与Cookie 它可以存储中文数据
可以使用 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("删除完毕")
}

发布了76 篇原创文章 · 获赞 17 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43778179/article/details/104722009