Gin- Cookie\Session相关

news2024/12/19 8:16:33

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp 微信小程序 功能入口

单行单独展示 效果图 html <view class"shopchoose flex jsb ac" click"routerTo(要跳转的页面)"><view class"flex ac"><image src"/static/dyd.png" mode"aspectFit" class"shopchooseimg"&g…

uniapp开发微信小程序优化项目

问题一&#xff1a;对JS文件进行压缩 1、上传代码时自动压缩 2、运行时压缩压缩代码 3、以上2步不行可直接在开发者工具设置 二、 主包与vendor.js过大问题 1、配置 manifest.json 分包配置 与 组件懒加载配置 "lazyCodeLoading" : "requiredComponents" …

day50|DFS,BFS

深度优先遍历&#xff08;DFS&#xff09; 不撞南墙不回头算法 撞了之后就回退一步找别的路&#xff08;回溯算法&#xff09; 直到访问所有的顶点 注意&#xff1a;深度优先遍历的序列不是唯一的 若无向图非连通&#xff1a; 需要执行多次深度优先遍历 重要结论&#xff…

Linux系统安装部署Tomcat

1、进入Tomcat官网&#xff0c;官网地址&#xff1a;https://tomcat.apache.org/ 2、点击左侧Download下的Archives按钮 3、选择需要下载的版本 下载地址&#xff1a;https://archive.apache.org/dist/tomcat/ 4、点击自己需要下载的版本&#xff0c;我这里下载的是9.0.6 5、…

java全栈day17--Web后端实战(java操作数据库)

前言&#xff1a;本章应该是针对数据库基础讲解&#xff0c;数据的增删改查但是本人忘记对知识进行归纳总结就直接跳过&#xff0c;基本的内容都很简单&#xff0c;都是套式子使用。现在开始学习本章&#xff0c;很重要需要好好掌握。 一、使用的工具 二、JDBC 2.1概述 JDBC …

分立器件---运算放大器关键参数

运算放大器 关键参数 1、供电电压:有单电源电压、双电源电压,双电源电压尽量两个电源都接。如图LM358B,供电电压可以是20V或者是40V和GND。 2、输入偏置电流IB:当运放输出直流电压为零时,运放两个输入端流进或者流出直流电流的平均值。同向输入端电流IB+与反向输入端电流…

CS61a.1 textbook1.2 编程要素

1.structure and interpretation of computer programs Python 内置了对各种常见编程活动的支持&#xff0c; 例如&#xff0c;操作文本、显示图形以及通过 互联网。Python 代码行 >>> from urllib.request import urlopen是一个 import 语句&#xff0c;用于加载用…

第100+33步 ChatGPT学习:时间序列EMD-ARIMA-LSTM模型

基于Python 3.9版本演示 一、写在前面 上一节&#xff0c;我们学了经验模态分解&#xff08;Empirical Mode Decomposition&#xff0c;EMD&#xff09;。 如同结尾所说&#xff0c;“那么&#xff0c;做这些分解有什么作用呢&#xff1f;有大佬基于这些分解出来的序列分别作…

vulnhub靶场【DriftingBlues】之7

前言 靶机&#xff1a;DriftingBlues-6&#xff0c;IP地址192.168.1.65 攻击&#xff1a;kali&#xff0c;IP地址192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24 信息收集 使用nmap扫描端口 SSH服务&…

[Unity]在unity 中输出调试安卓真机日志

添加包 Android Logcat com.unity.mobile.android-logcat 简单介绍常用的用法&#xff1a; 手机USB连接unity&#xff0c;下图可以看到手机型号 可以过滤具体软件的日志

centos stream 8下载安装遇到的坑

早在2020年12月。CentOS 官方发文宣称&#xff1a;“CentOS项目的未来是 CentOS Stream 明年我们会将重点从CentOS Linux 转移到CentOS Stream 它紧随当前 RHEL 版本之前。CentOS Linux 8 作为 RHEL 8 的重建&#xff0c;将于 2021 年底结束。CentOS Stream 在该日期之后继续&a…

信息安全实训室网络攻防靶场实战核心平台解决方案

一、引言 网络安全靶场&#xff0c;作为一种融合了虚拟与现实环境的综合性平台&#xff0c;专为基础设施、应用程序及物理系统等目标设计&#xff0c;旨在向系统用户提供全方位的安全服务&#xff0c;涵盖教学、研究、训练及测试等多个维度。随着网络空间对抗态势的日益复杂化…

视频孪生在景区文件场景中的应用

视频孪生技术在景区的应用主要体现在提升景区的智能化管理和游客的沉浸式体验上‌。依托于视频孪生时空承载平台&#xff0c;可在景区实景三维孪生场景中直观展示景区文物资源、建筑景观、自然景观等资源的类型、数量、空间分布等信息&#xff0c;并可详细查询单体景观详细资料…

电脑excel词典(xllex.dll)文件丢失是或损坏是什么原因?“xllex.dll文件缺失“要怎么解决?

Excel词典&#xff08;xllex.dll&#xff09;文件丢失或损坏&#xff1f;别担心&#xff0c;这里有解决之道&#xff01; 在日常的电脑使用和办公软件操作中&#xff0c;我们偶尔会碰到一些让人头疼的问题&#xff0c;比如Excel突然提示“Excel词典&#xff08;xllex.dll&…

【MySQL】优雅的使用MySQL实现分布式锁

MySQL实现分布式锁 引言二、基于唯一索引2.1、实现思路2.2、代码实现2.3、 测试代码2.4、小结 三、基于悲观锁3.1 、实现思路3.2、代码实现3.3、测试代码3.4、小结 四、基于乐观锁4.1 、实现思路4.2 、代码实现4.3 、测试代码4.4、小结 总结 引言 在文章《Redis实现分布式锁详…

Elasticsearch:使用 Open Crawler 和 semantic text 进行语义搜索

作者&#xff1a;来自 Elastic Jeff Vestal 了解如何使用开放爬虫与 semantic text 字段结合来轻松抓取网站并使其可进行语义搜索。 Elastic Open Crawler 演练 我们在这里要做什么&#xff1f; Elastic Open Crawler 是 Elastic 托管爬虫的后继者。 Semantic text 是 Elasti…

健康养生:拥抱生活的艺术

健康养生&#xff1a;拥抱生活的艺术 在快节奏的现代生活中&#xff0c;健康已成为我们最宝贵的财富。健康养生&#xff0c;不仅仅是一种生活方式的选择&#xff0c;更是一种对待生活的态度&#xff0c;它关乎于如何在日常中寻找到平衡&#xff0c;让身心得以滋养&#xff0c;…

零基础开始学习鸿蒙开发-交友软件页面设计

目录 1.找一张网图&#xff0c;确定大致页面设计 2.页面布局代码详细介绍 3.完整的代码如下 4.最终的运行效果如下图所示 5.总结 1.找一张网图&#xff0c;确定大致页面设计 2.页面布局代码详细介绍 2.1 顶部文字与搜索框布局&#xff0c;在顶部采用行Row组件布局&#xf…

大数据之Hbase环境安装

Hbase软件版本下载地址&#xff1a; http://mirror.bit.edu.cn/apache/hbase/ 1. 集群环境 Master 172.16.11.97 Slave1 172.16.11.98 Slave2 172.16.11.99 2. 下载软件包 #Master wget http://archive.apache.org/dist/hbase/0.98.24/hbase-0.98.24-hadoop1-bin.tar.gz…

【Java服务端开发】深入理解Java中的Server 层的详细分析

目录 1. 什么是服务端&#xff08;Server&#xff09;层&#xff1f; 2. 设计 Server 层的基本原则 2.1 单一职责原则 2.2 面向接口编程 2.3 事务管理 3. 基于 Spring 的 Server 层实现 3.1 示例&#xff1a;创建一个简单的订单服务 3.2 编写 OrderService 3.3 编写 O…