当前位置: 首页 > news >正文

汕头市通信建设管理局网站关键词查询爱站网

汕头市通信建设管理局网站,关键词查询爱站网,哪里可以做网站平台,手动升级wordpress1.Cookie(1).介绍HTTP 是无状态协议,简单地说,当浏览了一个页面,然后转到同一个网站的另一个页面,服务器无法认识到这是同一个浏览器在访问同一个网站,每一次的访问,都是没有任何关系的,如果要实现多个页面之间共享数据的话就可以…

1.Cookie

(1).介绍

HTTP 是无状态协议,简单地说,当浏览了一个页面,然后转到同一个网站的另一个页
面,服务器无法认识到这是同一个浏览器在访问同一个网站,每一次的访问,都是没有任何
关系的,如果要实现多个页面之间共享数据的话就可以使用 Cookie 或者 Session 实

cookie 是存储于访问者计算机的浏览器中,可以用同一个浏览器访问同一个域名
的时候共享数据

(2).Cookie 能实现的功能

1).保持用户登录状态

2).保存用户浏览的历史记录

3).电商网站的加入购物车

...

(3).设置和获取 Cookie,多个二级域名共享 cookie

参考文档:https://gin-gonic.com/zh-cn/docs/examples/cookie/

参考文章:https://blog.csdn.net/zhoupenghui168/article/details/128885820

设置 Cookie

c.SetCookie(name, value string, maxAge int, path, domain string, secure, httpOnly bool)
参数说明:
第一个参数 key
第二个参数 value
第三个参数 过期时间.如果只想设置 Cookie 的保存路径而不想设置存活时间,可以在第三个
参数中传递 nil
第四个参数 cookie 的路径
第五个参数 cookie 的路径 Domain 作用域 本地调试配置成 localhost , 正式上线配置成域名
第六个参数是 secure ,当 secure 值为 true 时,cookie 在 HTTP 中是无效,在 HTTPS 中
才有效
第七个参数 httpOnly,是微软对 COOKIE 做的扩展。如果在 COOKIE 中设置了“httpOnly”属性,
则通过程序(
JS 脚本、applet 等)将无法读取到 COOKIE 信息,防止 XSS 攻击产生

获取 Cookie

cookie, err := c.Cookie("name")

完整案例

package ityingimport ("github.com/gin-gonic/gin""net/http"
)type DefaultController struct {}func (con DefaultController) Index(c *gin.Context) {//设置cookie//3600 表示 多少秒过期c.SetCookie("username", "李四", 3600, "/", "127.0.0.1", false, true)//多个二级域名共享 cookie//1、分别把 a.gin.com 和 b.gin.com 解析到我们的服务器//2、我们想的是用户在 a.gin.com 中设置 Cookie 信息后在 b.gin.com 中获取刚才设置的//cookie,也就是实现多个二级域名共享 cookie//这时候的话我们就可以这样设置 cookiec.SetCookie("username", "李四", 3600, "/", "*.gin.com", false, true)c.HTML(http.StatusOK, "default/index.html",gin.H{"msg":"我是一个msg","t": 1629788010,})
}func (con DefaultController) News(c *gin.Context) {//获取cookieusername, _ := c.Cookie("username")c.String(http.StatusOK, "新闻--cookie.username=" +username)
}func (con DefaultController) Shop(c *gin.Context) {//获取cookieusername, _ := c.Cookie("username")c.String(http.StatusOK, "shop--cookie.username=" +username)
}//删除cookie
func (con DefaultController) DeleteCookie(c *gin.Context) {//删除cookiec.SetCookie("username", "李四", -1, "/", "127.0.0.1", false, true)
}

2.Session

(1).介绍

session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 session
保存在服务器上

(2).Session 的工作流程

当客户端浏览器第一次访问服务器并发送请求时,服务器端会创建一个 session 对象,生成
一个类似于 key,value 的键值对,然后将 value 保存到服务器 将 key(cookie)返回到浏览器(客
户)端,浏览器下次访问时会携带 key(cookie),找到对应的 session(value)

(3).Gin 中使用 Session

Gin 官方没有提供 Session 相关的文档,这个时候可以使用第三方的 Session 中间
件来实现:https://github.com/gin-contrib/sessions
gin-contrib/sessions 中间件支持的存储引擎:
• cookie
• memstore
• redis
• memcached
• mongodb

(4).基于 Cookie 存储 Session

1).安装 session 包:在main.go对应的目录下运行

go get github.com/gin-contrib/sessions

2).基本的 session 用法

main.go

package mainimport ("fmt""gindemo/models""gindemo/routers""github.com/gin-contrib/sessions""github.com/gin-contrib/sessions/cookie"_ "github.com/gin-contrib/sessions/cookie""github.com/gin-contrib/sessions/redis""github.com/gin-gonic/gin""html/template""os""path/filepath""strings""time"
)func main() {//初始化路由,会设置默认中间件:engine.Use(Logger(), Recovery()),可以使用gin.New()来设置路由r := gin.Default()//创建基于cookie的存储引擎,secret11111参数是用于加密的密钥store := cookie.NewStore([]byte("secret11111"))//设置session中间件,参数mysession,指的是session的名字,也是cookie的名字//store是前面创建的存储引擎,我们可以替换成其他存储引擎r.Use(sessions.Sessions("mysession", store))//定义模板函数,必须在r.LoadHTMLGlob前面r.SetFuncMap(template.FuncMap{"UnixToTime": models.UnixToTime, //注册模板函数"Println":    Println,})//加载templates中所有模板文件, 使用不同目录下名称相同的模板,注意:一定要放在配置路由之前才得行//如果模板在多级目录里面的话需要这样配置 r.LoadHTMLGlob("templates/**/**/*") /** 表示目录//LoadHTMLGlob只能加载同一层级的文件//比如说使用router.LoadHTMLFile("/templates/**/*"),就只能加载/templates/admin/或者/templates/order/下面的文件//解决办法就是通过filepath.Walk来搜索/templates下的以.html结尾的文件,把这些html文件都加载一个数组中,然后用LoadHTMLFiles加载//r.LoadHTMLGlob("templates/**/*")var files []stringfilepath.Walk("./templates", func(path string, info os.FileInfo, err error) error {if strings.HasSuffix(path, ".html") {files = append(files, path)}return nil})r.LoadHTMLFiles(files...)//配置静态web目录 第一个参数表示路由,第二个参数表示映射的目录r.Static("/static", "./static")//分组路由文件routers.AdminRoutersInit(r)routers.ApiRoutersInit(r)routers.DefaultRoutersInit(r)r.Run() // 启动一个web服务
}

控制器设置,获取session

package ityingimport ("github.com/gin-contrib/sessions""github.com/gin-gonic/gin""net/http"
)type DefaultController struct {}func (con DefaultController) Index(c *gin.Context) {//设置sessionsession := sessions.Default(c)session.Set("username", "张1三")session.Save() // 设置session的时候必须调用c.HTML(http.StatusOK, "default/index.html",gin.H{"msg":"我是一个msg","t": 1629788010,})
}func (con DefaultController) News(c *gin.Context) {//获取session//初始化session对象session:=sessions.Default(c)//设置过期时间session.Options(sessions.Options{MaxAge:3600*6,//6hrs})username := session.Get("username")c.String(http.StatusOK, "新闻--session.username=%v" , username)
}func (con DefaultController) Shop(c *gin.Context) {//获取cookieusername, _ := c.Cookie("username")c.String(http.StatusOK, "shop--cookie.username=" +username)
}//删除cookie
func (con DefaultController) DeleteCookie(c *gin.Context) {//删除cookiec.SetCookie("username", "李四", -1, "/", "127.0.0.1", false, true)
}

(5).基于Redis 存储Session

如果想将 session 数据保存到 redis 中,只要将 session 的存储引擎改成 redis 即可
使用 redis 作为存储引擎,
首先安装 redis 存储引擎的包

1).安装 redis 存储引擎包:在main.go对应的目录下运行

go get github.com/gin-contrib/sessions/redis

2).案例

main.go
package mainimport ("fmt""gindemo/models""gindemo/routers""github.com/gin-contrib/sessions""github.com/gin-contrib/sessions/cookie"_ "github.com/gin-contrib/sessions/cookie""github.com/gin-contrib/sessions/redis""github.com/gin-gonic/gin""html/template""os""path/filepath""strings""time"
)func main() {//初始化路由,会设置默认中间件:engine.Use(Logger(), Recovery()),可以使用gin.New()来设置路由r := gin.Default()//初始化基于redis的存储引擎: 需要启动redis服务,不然会报错//参数说明://自第1个参数-redis最大的空闲连接数//第2个参数-数通信协议tcp或者udp//第3个参数-redis地址,格式,host:port 第4个参数-redis密码//第5个参数-session加密密钥store,_:=redis.NewStore(10,"tcp","localhost:6379","",[]byte("secret"))r.Use(sessions.Sessions("mysession",store))//定义模板函数,必须在r.LoadHTMLGlob前面r.SetFuncMap(template.FuncMap{"UnixToTime": models.UnixToTime, //注册模板函数"Println":    Println,})//加载templates中所有模板文件, 使用不同目录下名称相同的模板,注意:一定要放在配置路由之前才得行//如果模板在多级目录里面的话需要这样配置 r.LoadHTMLGlob("templates/**/**/*") /** 表示目录//LoadHTMLGlob只能加载同一层级的文件//比如说使用router.LoadHTMLFile("/templates/**/*"),就只能加载/templates/admin/或者/templates/order/下面的文件//解决办法就是通过filepath.Walk来搜索/templates下的以.html结尾的文件,把这些html文件都加载一个数组中,然后用LoadHTMLFiles加载//r.LoadHTMLGlob("templates/**/*")var files []stringfilepath.Walk("./templates", func(path string, info os.FileInfo, err error) error {if strings.HasSuffix(path, ".html") {files = append(files, path)}return nil})r.LoadHTMLFiles(files...)//配置静态web目录 第一个参数表示路由,第二个参数表示映射的目录r.Static("/static", "./static")//分组路由文件routers.AdminRoutersInit(r)routers.ApiRoutersInit(r)routers.DefaultRoutersInit(r)r.Run() // 启动一个web服务
}
控制器设置,获取session
package ityingimport ("github.com/gin-contrib/sessions""github.com/gin-gonic/gin""net/http"
)type DefaultController struct {}func (con DefaultController) Index(c *gin.Context) {//设置sessionsession := sessions.Default(c)session.Set("username", "张1三")session.Save() // 设置session的时候必须调用c.HTML(http.StatusOK, "default/index.html",gin.H{"msg":"我是一个msg","t": 1629788010,})
}func (con DefaultController) News(c *gin.Context) {//获取session//初始化session对象session:=sessions.Default(c)//设置过期时间session.Options(sessions.Options{MaxAge:3600*6,//6hrs})username := session.Get("username")c.String(http.StatusOK, "新闻--session.username=%v" , username)
}func (con DefaultController) Shop(c *gin.Context) {//获取cookieusername, _ := c.Cookie("username")c.String(http.StatusOK, "shop--cookie.username=" +username)
}//删除cookie
func (con DefaultController) DeleteCookie(c *gin.Context) {//删除cookiec.SetCookie("username", "李四", -1, "/", "127.0.0.1", false, true)
}
注意:在使用redis储存session时,需要运行redis程序,不然会报错

[上一节][golang gin框架] 4.自定义Model以及Gin 文件上传

http://www.ritt.cn/news/12584.html

相关文章:

  • 跨境独立网站教育机构排名
  • 网站建设带支付源码如何增加网站的外链
  • 网站建设 武汉百度权重5的网站能卖多少钱
  • wordpress添加分类文档重庆seo怎么样
  • 网站建设中的html页面下载武汉百度快照优化排名
  • 如何搭建一个自己上传视频的网站网络营销平台的主要功能
  • 哪家公司设计网站好上海搜索优化推广哪家强
  • 如何用github做网站搜狗关键词优化软件
  • 网站建设和维护怎么学seo招聘要求
  • 黄埔做网站的公交换链接的其它叫法是
  • 有哪些可以做图的网站啊网站优化推广服务
  • 设计广告图用什么软件好用湛江seo推广外包
  • 网站开发硬件环境怎么填新闻头条
  • wordpress中文主题下载地址seo推广优化外包公司
  • 用vs2013做网站网页制作平台有哪些
  • 锡山区住房和城乡建设局网站互联网营销师证书
  • 北外网院网站建设作业公司网站建设北京
  • 建设自己的网站单页网站排名优化
  • 可以免费做简历的网站网站建设解决方案
  • 中国建设购物网站制作企业网站的公司
  • 外贸b2b平台有哪些平台百度seo排名优化技巧分享
  • 怎么做网站的广告四川刚刚发布的最新新闻
  • 建设网站用什么好抖音十大搜索关键词
  • 如何在百度提交网站百度怎么优化网站关键词
  • 河北建设厅网站设置网络营销主要是学什么的
  • 网站优化升级怎么做系统清理优化工具
  • 南京网站设计是什么找做网站的公司
  • 专业的网站建站公司广州seo关键词优化是什么
  • 做网站建设的网站站长统计幸福宝下载
  • 做网站大型新闻头条今日新闻60条