Beego脱坑(九)Cookie和Session - Go语言中文社区

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)
	}
}

运行结果 

 

我们先通过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

  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("删除完毕")
}

 

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/yang731227/article/details/82263125
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-07 21:17:51
  • 阅读 ( 2478 )
  • 分类:Go

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢

扫一扫下方二维码,关注本站官方公众号
获取永久解锁本站全部文章的验证码
还能不定期领现金红包