首页 > 其他分享 >gin cookie和session

gin cookie和session

时间:2024-02-27 16:24:53浏览次数:25  
标签:username sessions session cookie context gin

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

● cookie 是存储于访问者计算机的浏览器中(比如保存用户的登录状态),可以让我们用同一个浏览器访问同一个域名的时候共享数据

设置和获取cookie
  • context.Set()只能实现一个页面中的数据共享
  • Cookie可以实现多个页面中的数据共享
	router.POST("/index", func(context *gin.Context) {

		/*
			SetCookie参数:
				name:key
				value:值
				maxAge int : 过期时间,单位秒
				path:cookie生效的路径,设置为"/"时,表示该Cookie将在整个网站的任何路径下都可用,只要属于同一个域名
				domain string:cookie对应的域,本地域名使用localhost
				secure bool : 是否安全的cookie(只在https协议下生效)
				httpOnly bool:是否限制浪拉山情脚本对cookie的操作,比如使用JavaScript等客户端脚本语言访问该Cookie
		*/
		// 设置cookie
		context.SetCookie("username", "li", 3600, "/", "localhost", false, false)

	})
func (con DefaultController) GetInfo(context *gin.Context) {
	// 获取cookie
	username, err := context.Cookie("username")
	if err != nil {
		context.String(http.StatusBadRequest,"cookie获取失败")
		return
	}
	context.String(http.StatusOK,username)
	

}
删除cookie
	// 设置cookie的时间为-1
		context.SetCookie("username", "li", -1, "/", "localhost", false, false)})
多个二级域名共享cookie
		// 设置cookie的的域 
		// 设置的域为.itying.com,那么 任意前缀.itying.com 都可以共享cookie,比如a.itying.com、b.itying.com 
		context.SetCookie("username", "li", 3600, "/", ".itying.com", false, false)

session

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

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

基于cookie存储session

Gin 官方没有给我们提供 Session,可以使用第三方的 Session 中间件来实现

	"github.com/gin-contrib/sessions"
	"github.com/gin-contrib/sessions/cookie"
配置中间件
		// cookie.NewStore创建一个基于cookie的存储引擎,参数是字节切片,自定义的用于加密的密钥
		  // 如果我们想将 session 数据保存到 redis而非Server本地,只要将 session 的存储引擎改成 redis引擎 即可
		store := cookie.NewStore([]byte("ses7655s"))
		// 设置session中间件,第一个参数是session的名字,也是cookie的名字,store的创建的存储引擎,也可以替换其他的存储引擎
		router.Use(sessions.Sessions("sessionName", store))
设置session
func (con DefaultController) SetSession(context *gin.Context) {
	// 获取session对象
	// sessions.Default创建一个默认的会话管理器,返回一个*sessions.Session对象,用于管理和存储会话数据

	session := sessions.Default(context)
		// 设置过期时间,如果不设置,默认的过期时间是30天
	session.Options(sessions.Options{
		MaxAge: 3600 * 6, // 过期时间是秒

	})
	
	// 设置session
	session.Set("username", "li")
	// 保存session,必须调用
	session.Save()

}
获取session
func (con DefaultController) GetSession(context *gin.Context) {
	session := sessions.Default(context)
	// 获取session
	username := session.Get("username")
	user,_ := username.(string)
	context.String(http.StatusOK, user)

标签:username,sessions,session,cookie,context,gin
From: https://www.cnblogs.com/Mickey-7/p/18037101

相关文章

  • gin中间件&控制器
    中间件Gin框架允许开发者在处理请求的过程中,加入用户自己的钩子(Hook)函数。这个钩子函数就叫中间件,中间件适合处理一些公共的业务逻辑,比如登录认证、权限校验、数据分页、记录日志、耗时统计等。通俗的讲:中间件就是匹配路由前和匹配路由完成后执行的一系列操作路由中间件Gi......
  • Nginx443端口绑定多域名
    Nginx443绑定多域名1.修改nginx的配置文件server{#基于域名的虚拟主机listen443ssl;server_nametest1.abc.com;ssl_certificate/home/nginx/ssl/test1.abc.com.pem;ssl_certificate_key/home/nginx/ssl......
  • Advanced .Net Debugging 2:CLR基础
    一、简介这是2024新年后我的第一篇文章,也是我的《Advanced.NetDebugging》这个系列的第二篇文章。这篇文章告诉我们为了进行有效的程序调试,我们需要掌握哪些知识。言归正传,无论采取什么形式来分析问题,对被调试系统的底层了解的越多,就越有可能成功的找出问题的根源。在N......
  • AtCoder Beginner Contest 342
    AtCoderBeginnerContest342比赛链接开学了,以后codeforces大概率只能补题了,但是atcoder还是可以做的A-Yay!思路找出只出现一次的字符就可以Code#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongvoidsolve(){ strings; cin>>s; std::map<ch......
  • gin 路由处理&控制器
    获取请求传参获取get请求传参Query和DefaultQuery router:=gin.Default() //127.0.0.1:8080/index?page=1&category=2 router.GET("/index",func(context*gin.Context){ //通过Query获取get请求url传入的参数 page:=context.Query("page") //通过DefaultQ......
  • springboot3 security6.0.2 session timeout 方案
    方案1packagejp.co.toppan.dch.web.core.security;importjakarta.servlet.ServletException;importjakarta.servlet.http.Cookie;importjakarta.servlet.http.HttpServletRequest;importjakarta.servlet.http.HttpServletResponse;importorg.apache.commons.lang3.S......
  • yum nginx报错
    [root@instance-as0nsoaxnginx]#yum-yinstallgdgd-develerror:db5error(11)fromdbenv->open:Resourcetemporarilyunavailableerror:cannotopenPackagesindexusingdb5-Resourcetemporarilyunavailable(11)error:cannotopenPackagesdatabasein......
  • gin环境&路由配置
    Gin是一个Go(Golang)编写的轻量级httpweb框架,运行速度非常快Gin的官网:https://gin-gonic.com/zh-cn/GinGithub地址:https://github.com/gin-gonic/gingin环境搭建下载并安装#gomod同级目录下goget-ugithub.com/gin-gonic/gin......
  • AtCoder Beginner Contest 342
    D.SquarePair给你一个数组,最多2e5个元素,每个元素的范围是0到2e5问选出两个元素,乘积为完全平方数的情况有多少?(任选a[i]a[j],且满足i<j)一种思路是用map记录数组的元素,选出一个元素x后,枚举所有完全平方数,如果完全平方数可以整除选出的这个元素且整除的结果y在map......
  • Toyota Programming Contest 2024#2(AtCoder Beginner Contest 341)D - Only one of two
    目录链接题面题意题解代码总结链接D-Onlyoneoftwo题面题意求第\(k\)个只能被\(N\)或\(M\)整除的数题解\([1,x]\)中的能被\(n\)整除的数有\(\lfloor\frac{x}{n}\rfloor\)个\([1,x]\)中的能被\(m\)整除的数有\(\lfloor\frac{x}{m}\rfloor\)个\([1,x]\)中的能被\(n\)......