Gin- Cookie\Session相关

Cookie,Session是什么?

Cookie直译小饼干,是一些数据信息,类似于小型文本文件,存储在浏览器上。Cookie是进行第一次登录之后,由服务器创建后返回给浏览器的。之后,每当浏览器再次向同一服务器发送请求时,它会自动将这个Cookie附加在请求头中,服务器通过解析这个Cookie来识别用户。

 

 

Session也是在第一次请求服务器时由服务端生成的,但是保存在服务器上,服务器会创建一个session对象,并生成唯一的sessionID,保存在cookie中。之后再次访问该服务器时,会携带这个sessionID,服务器通过这个id找到session独享,从而维持用户的状态。

为什么要有Cookie,Session

因为Http是无状态的,无法保存登录信息,因此通过Cookie,Session,下次再进行登录时,服务器可以识别用户,保存用户的登陆状态和登录信息。

想起来还有Token,就去学习了一下

Token是令牌的意思,是服务端生成的一串字符串,在首次访问后服务器端生成后返回给客户,之后客户端不再需要用户名和密码,只需要带上这个Token就可以请求数据,token即客户端和服务器之间的一种约定吧。

总的来说

 第一次登录,服务器给客户端颁发一个唯一的sessionId, 并通过http的响应头返回。客户端(浏览器)发现返回的数据中有cookie数据就把这个cookie数据存放到内存。下次再发送http请求时,把内存中的cookie数据再塞到http请求头中,一并发给服务器,服务器在解析请求时,发现请求头中有cookie,就开始识别cookie中的sessionId,拿到sessionId,我们就知道这个请求时由哪个客户端发送来的了。

gin配置session

gin框架处理session有专门的中间件,安装后就可以使用

go get github.com/gin-contrib/sessions

使用sessions 中间件注意要点:

  1. session 仓库其实就是一个 map[interface]interface 对象,所有 session可以存储任意数据

  2. session 使用的编解码器是自带的gob,所以存储类似: struct、map 这些对象时需要先注册对象,不然会报错

  3. session 存储引擎支持: cookie、内存、mongodb、redis、postgres、memstore、memcached 以及 gorm 支持的各类数据库(mysql、sqlite)

  4. session 在创建时有一个配置项,可以配置session过期时间、cookie、domain、secure、path等参数

  5. 调用 session 方法: Set()、 Delete()、 Clear()、方法后,必须调用一次 Save() 方法。否则session数据不会更新

package main

import (
	"encoding/gob"
	//session包
	"github.com/gin-contrib/sessions"
	//session存储引擎包
	"github.com/gin-contrib/sessions/cookie"
	"github.com/gin-gonic/gin"
)

type User struct {
	Username string `json: username`
	Password string `json: password`
}

func main() {
	router := gin.Default()
	// 创建基于cookie的存储殷勤,secret用于加密,可以随便填写
	store := cookie.NewStore([]byte("secret"))
	//设置session中间件,参数mysession,指的是session的名字,也是cookie的名字
	router.Use(sessions.Sessions("mysession", store))
	//session 使用的编解码器是自带的gob,所以存储类似: struct、map 这些对象时需要先注册对象
	gob.Register(User{})

	router.GET("/hello", func(c *gin.Context) {
		user := User{"zhangsan", "123456"}
		//初始化session对象
		session := sessions.Default(c)
		//Set设置session值,k-v类型
		session.Set("user", user)
		//保存session对象,对session进行操作后,一定要进行save
		session.Save()

		c.JSON(200, user)
	})

	router.GET("/user", func(c *gin.Context) {
		session := sessions.Default(c)
		//获取session值
		user := session.Get("user")
		c.JSON(200, user)
	})

	router.Run(":8080")
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/938772.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用Python打造高效的PDF文件管理应用(合并以及分割)

在日常工作和学习中,我们经常需要处理大量PDF文件。手动合并、分割PDF不仅耗时,还容易出错。今天,我们将使用Python的wxPython和PyMuPDF库,开发一个强大且易用的PDF文件管理工具。 C:\pythoncode\new\mergeAndsplitPdf.py 所有代…

深度学习中自适应学习率调度器

传统观点认为,太大的学习率不利于优化深度神经网络,而相比固定的学习率而言,变化的学习率更能提供快速的收敛。基于此,本文作者基于理论基础提出了一个计算深度神经网络学习率的新方法。实验结果证明了该方法的有效性。 训练神经…

文献研读|基于像素语义层面图像重建的AI生成图像检测

前言:本篇文章主要对基于重建的AI生成图像检测的四篇相关工作进行介绍,分别为基于像素层面重建的检测方法 DIRE 和 Aeroblade,以及基于语义层面重建的检测方法 SimGIR 和 Zerofake;并对相应方法进行比较。 相关文章:论…

ElasticSearch06-分片节点分配

零、文章目录 ElasticSearch06-分片节点分配 1、单节点多分片多副本 (1)启动一个空节点 节点的配置如下 cluster.name: mycluster node.name: node-01 node.master: true node.data: true network.host: 127.0.0.1 http.port: 9201 transport.tcp.p…

信息学奥赛一本通 1438:灯泡 | 洛谷 P5931 [清华集训2015] 灯泡

【题目链接】 ybt 1438:灯泡 洛谷 P5931 [清华集训2015] 灯泡 【题目考点】 1. 三分 求函数极值 2. 相似三角形 3. 对钩函数 【解题思路】 首先考虑影子还没有到达对面墙壁的情况 记BM长度为x,影子为AM,长度为L。三角形ABC相似于三角…

揭开 Choerodon UI 拖拽功能的神秘面纱

01 引言 系统的交互方式主要由点击、选择等组成。为了提升 HZERO 系统的用户体验、减少部分操作步骤,组件库集成了卓越的拖拽功能,让用户可以更高效流畅的操作系统。 例如:表格支持多行拖拽排序、跨表数据调整、个性化调整列顺序&#xff1…

【物联网技术与应用】实验4:继电器实验

实验4 继电器实验 【实验介绍】 继电器是一种用于响应施加的输入信号而在两个或多个点或设备之间提供连接的设备。换句话说,继电器提供了控制器和设备之间的隔离,因为设备可以在AC和DC上工作。但是,他们从微控制器接收信号,因此…

fpga系列 HDL:Quartus II 时序约束 静态时序分析 (STA) test.out.sdc的文件结构

test.out.sdc的文件结构 ## Generated SDC file "test.out.sdc"## Copyright (C) 1991-2013 Altera Corporation ## Your use of Altera Corporations design tools, logic functions ## and other software and tools, and its AMPP partner logic ## functions,…

Windows安全中心(病毒和威胁防护)的注册

文章目录 Windows安全中心(病毒和威胁防护)的注册1. 简介2. WSC注册初探3. WSC注册原理分析4. 关于AMPPL5. 参考 Windows安全中心(病毒和威胁防护)的注册 本文我们来分析一下Windows安全中心(Windows Security Center…

HTML中的Vue3解析!

#Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架。它在 HTML 中发挥着重要的作用,可以让开发者轻松地创建交互式的网页应用。与 HTML 结合时,Vue 3 通过自定义指令、组件等方式增强了 HTML 的功能。# 一、vue的概述 Vue 采用了双向数据绑定机制…

ARM嵌入式学习--第八天(PWM)

PWM -PWM介绍 PWM(pulse Width Modulation)简称脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术,广泛应用在测量,通信,工控等方面 PWM的频率 是指在1秒钟内,信号从…

TongESB7.1.0.0安装参考指引+测试参考(by lqw)

文章目录 安装安装准备配置jdk安装管理中心(manager)安装运行时(server)安装mysql并配置manager(新装阶段考虑)放入授权启动内置redis启动内置redis启动manager和server停止manager和server访问控制台如何在控制台上重置密码 测试…

【现代C++开发】使用现代的C++快速开发一款串口读写软件

文章目录 前言一、必要条件二、实现步骤1.创建项目2.配置代码提示3.安装依赖3.编译程序4. 编写实现代码 前言 最近关于C闹出来的动静态势挺大的,主要是由于爱美丽卡开始抵制C,最近有不少文章都报道了这件事,比如 即使C到了这个时候&#xf…

linux上qt打包(二)

sudo apt install git 新建一个文件夹 名为xiazai, chmod -R 777 xiazai cd xiazai 并进入这个文件夹,然后clone git clone https://github.com/probonopd/linuxdeployqt.git 此处可能要fanQiang才能下 cd linuxdeployqt文件夹 下载平台需要的…

电脑开机提示error loading operating system怎么修复?

前一天电脑还能正常运行,但今天启动时却显示“Error loading operating system”(加载操作系统错误)。我已经仔细检查了硬盘、接线、内存、CPU和电源,确认这些硬件都没有问题。硬盘在其他电脑上可以正常使用,说明不是硬…

Nginx 在不同操作系统下的安装指南

Nginx 在不同操作系统下的安装指南 一、Linux 系统下 Nginx 的安装 (一)基于 Ubuntu 系统 更新软件包列表 打开终端,首先执行sudo apt-get update命令。这一步是为了确保系统的软件包列表是最新的,能够获取到最新版本的 Nginx 及…

NTLMv2 离线爆破

攻击者(kali):192.168.72.162 受害者(administrator):192.168.72.163 因为 NTLM 身份验证是通过计算正确的挑战值得出的,所以如果我们能获取域用户的 NTLM 认证某一服务的 Net-NTLM v2 Hash …

“TA”说|表数据备份还原:SQLark 百灵连接助力项目部署验收

💬 南飞雁|应用开发工程师 有些重要项目的部署验收,会在生产环境完成,验收完成后,又需要把这部分数据清空。这时就需要对数据表进行备份和还原,虽然可以通过命令直接实现,但是有一些操作门槛&am…

C++动态规划解决最长公共子序列

动规非常经典的一道题目,由于需要用到二维数组——姑且算为中等难度的题目,其实和01背包有着极高的相似度,无论是实现还是理论。 今天这篇博客不讲过多的DP理论,重在讲解题目本身。其实有一定经验的同志都清楚,DP的难点…

Meta升级Ray-Ban智能眼镜:新增实时AI对话与翻译功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…