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

发布做网站需求qq群网站建设 企泰科技

发布做网站需求qq群,网站建设 企泰科技,唐山营销型网站建设,蚌埠百度推广电话文章目录 一、Gin Session 存储的实现方案二、memstore#xff1a;基于内存的实现2.1 基本使用2.2 关键参数 三、使用redis#xff1a;多实例部署3.1 使用redis优势3.2 基本使用 四、信息安全的三个核心概念五、Gin Session 参数5.1 参数介绍 六、Session 自动刷新 一、Gin S… 文章目录 一、Gin Session 存储的实现方案二、memstore基于内存的实现2.1 基本使用2.2 关键参数 三、使用redis多实例部署3.1 使用redis优势3.2 基本使用 四、信息安全的三个核心概念五、Gin Session 参数5.1 参数介绍 六、Session 自动刷新 一、Gin Session 存储的实现方案 cookie基于cookie的实现不安全一般不会使用。gorm基于 GORM 的实现memcached基于 Memcached 的实现memstore基于内存的实现一般单实例部署用的比较多或者本地测试。mongo基于 MongoDB 的实现postgres基于 PostgreSQL 的实现redis基于 Redis 的实现多实例部署应该无脑选 redis 实现。tester用于测试的实现 其实Gin 中的session 是通过github.com/gorilla/sessions实现的只不过做了二次封装。 二、memstore基于内存的实现 2.1 基本使用 memstore是github.com/gin-contrib/sessions库提供的一个基于内存的Session存储后端。它将Session数据存储在应用程序的内存中适用于小型应用或用于开发和测试目的。以下是一个使用memstore的简单示例 安装gin-contrib/sessions库 go get -u github.com/gin-contrib/sessions使用memstore存储Session package mainimport (github.com/gin-contrib/sessionsgithub.com/gin-contrib/sessions/memstoregithub.com/gin-gonic/gin )func main() {// 初始化Gin引擎router : gin.Default()// 用内存存储 session// 这是基于内存的实现第一个参数是 authentication key,最好是 32 或者64 位//第二个参数是 encryption keystore : memstore.NewStore([]byte(moyn8y9abnd7q4zkq2m73yw8tu9j5ixm),[]byte(o6idlo2cb9f9pb6h46fimllw481ldebi))router.Use(sessions.Sessions(mysession, store))// 路由示例router.GET(/set, func(c *gin.Context) {// 设置Sessionsession : sessions.Default(c)session.Set(key, value)session.Save()c.JSON(200, gin.H{message: Session set})})router.GET(/get, func(c *gin.Context) {// 获取Sessionsession : sessions.Default(c)value : session.Get(key)c.JSON(200, gin.H{key: value})})// 启动服务router.Run(:8080) } 在上述示例中我们使用了memstore.NewStore创建一个基于内存的Session存储后端。记得在实际应用中根据实际需求选择适当的Session存储后端例如在生产环境中可能更常见的是使用像Redis这样的持久化存储。 请注意memstore是基于内存的如果应用程序重新启动所有存储在内存中的Session数据将被清除。因此它最适用于短期的Session需求而不适用于长期的数据存储。在实际生产环境中需要根据应用程序的需求选择合适的Session存储后端。 2.2 关键参数 我们通过NewStore入口进入可以看到官方要求传入鉴权和加密的Key对于Key的长度越长越复杂越安全。 在正常情况下要传入两个关键参数。第一个参数是 认证密钥authentication key最好是 32 或者 64 位。第二个参数是 加密密钥encryption key。 // 用内存存储 session // 这是基于内存的实现第一个参数是 authentication key,最好是 32 或者64 位 //第二个参数是 encryption key store : memstore.NewStore([]byte(moyn8y9abnd7q4zkq2m73yw8tu9j5ixm),[]byte(o6idlo2cb9f9pb6h46fimllw481ldebi)) // cookie 的名字叫做sessions ser.Use(sessions.Sessions(sessions, store))// 登录校验 ser.Use(middleware.NewLoginMiddlewareBuilder().Build())三、使用redis多实例部署 3.1 使用redis优势 在分布式环境下包括单例应用多实例部署都需要确保 Session 在每一个实例上都可以访问到而单节点只能访问当前环境的Session。 3.2 基本使用 在使用Redis作为Session存储时你需要使用Gin框架的github.com/gin-contrib/sessions中间件并选择一个支持Redis的Session存储后端比如github.com/gin-contrib/sessions/redis。 以下是一个基本的使用示例 安装依赖 go get -u github.com/gin-contrib/sessions go get -u github.com/gin-contrib/sessions/redis使用Redis存储Session package mainimport (github.com/gin-contrib/sessionsgithub.com/gin-contrib/sessions/redisgithub.com/gin-gonic/gin )func main() {// 初始化Gin引擎router : gin.Default()// 使用Redis存储Sessionstore, err : redis.NewStore(16, // 最大空闲链接数量过大会浪费过小将来会触发性能瓶颈tcp, // 指定与Redis服务器通信的网络类型通常为tcplocalhost:6379, // Redis服务器的地址格式为host:port, // Redis服务器的密码如果没有密码可以为空字符串[]byte(95osj3fUD7fo0mlYdDbncXz4VD2igvf0), // authentication key[]byte(0Pf2r0wZBpXVXlQNdpwCXN4ncnlnZSc3), // encryption key)if err ! nil {panic(err)}// 设置Session中间件router.Use(sessions.Sessions(mysession, store))// 路由示例router.GET(/set, func(c *gin.Context) {// 设置Sessionsession : sessions.Default(c)session.Set(key, value)session.Save()c.JSON(200, gin.H{message: Session set})})router.GET(/get, func(c *gin.Context) {// 获取Sessionsession : sessions.Default(c)value : session.Get(key)c.JSON(200, gin.H{key: value})})// 启动服务router.Run(:8080) } 在上述示例中我们使用了redis.NewStore创建一个基于Redis的Session存储后端。你需要提供Redis服务器的地址、密码和密钥等信息。 四、信息安全的三个核心概念 身份认证Authentication 身份认证是确认用户或系统的身份是否合法的过程。在身份认证中用户提供的身份信息例如用户名和密码、生物特征等被验证以确定其是否有权访问系统或资源。常见的身份认证方式包括用户名密码认证、多因素认证例如使用手机验证码或硬件令牌、生物特征认证等。数据加密Encryption 数据加密是通过使用算法将信息转化为密文以确保只有具备正确密钥的人或系统能够解密和访问原始信息。数据加密对于保护敏感信息、防止数据泄露和维护隐私非常重要。常见的加密算法包括对称加密同一个密钥用于加密和解密和非对称加密使用一对密钥一个用于加密另一个用于解密。权限控制Authorization 权限控制是确保用户或系统在身份认证成功后只能访问其被授权的资源和执行其被授权的操作的过程。这包括定义用户或系统的角色、分配权限、限制访问范围等。权限控制有助于防止未经授权的访问和确保系统的安全性。 五、Gin Session 参数 5.1 参数介绍 在Gin框架中Session的参数可以通过Options方法来传入Option。Options方法用于配置Session的一些参数以满足应用程序的需求。 参数详细解释 字段含义示例值PathCookie的路径“/”DomainCookie的域“your-domain.com”MaxAge最大生存时间秒3600Secure是否仅通过HTTPS传输trueHttpOnly是否禁止通过JavaScript访问CookietrueSameSiteSameSite属性http.SameSiteLaxMode 举个例子 package mainimport (github.com/gin-contrib/sessionsgithub.com/gin-gonic/ginnet/http )func main() {// 初始化Gin引擎router : gin.Default()// 配置Sessionstore : sessions.NewCookieStore([]byte(your-secret-key))store.Options(sessions.Options{Path: /,Domain: your-domain.com,MaxAge: 3600, // 设置为3600秒即1小时Secure: true, // 仅通过HTTPS传输CookieHttpOnly: true, // 禁止通过JavaScript访问CookieSameSite: http.SameSiteLaxMode, // SameSite属性限制在顶级导航时发送})router.Use(sessions.Sessions(mysession, store))// 路由示例router.GET(/set, func(c *gin.Context) {// 设置Sessionsession : sessions.Default(c)session.Set(key, value)session.Save()c.JSON(200, gin.H{message: Session set})})router.GET(/get, func(c *gin.Context) {// 获取Sessionsession : sessions.Default(c)value : session.Get(key)c.JSON(200, gin.H{key: value})})// 启动服务router.Run(:8080) }六、Session 自动刷新 实现方式在中间件中设置一个更新时间 // LoginMiddlewareBuilder 结构体的 Build 方法用于构建 Gin 中间件 func (l *LoginMiddlewareBuilder) Build() gin.HandlerFunc {// 使用 gob 注册 time.Now()以便在 Session 中存储 time.Time 类型gob.Register(time.Now())// 返回一个 Gin 中间件函数return func(ctx *gin.Context) {// 检查当前请求路径是否为不需要登录校验的路径if ctx.Request.URL.Path /users/login ||ctx.Request.URL.Path /users/signup {// 如果是不需要登录校验的路径直接返回不进行后续的登录检查return}// 获取默认的 Sessionsess : sessions.Default(ctx)// 获取 Session 中存储的 userIdid : sess.Get(userId)// 如果 userId 不存在说明用户未登录返回未授权状态码if id nil {ctx.AbortWithStatus(http.StatusUnauthorized)return}// 获取 Session 中的 updateTimeupdateTime : sess.Get(update_time)// 设置 Session 的 userId并配置 Session 的过期时间为 60 秒sess.Set(userId, id)sess.Options(sessions.Options{MaxAge: 60,})now : time.Now()// 如果 updateTime 为空说明是第一次登录设置 update_time 并保存 Sessionif updateTime nil {sess.Set(update_time, now)if err : sess.Save(); err ! nil {panic(err)}}// 如果 updateTime 不为空说明已经登录过检查是否超过 10 秒超过则刷新 update_time 并保存 SessionupdateTimeVal, _ : updateTime.(time.Time)if now.Sub(updateTimeVal) time.Second*10 {sess.Set(update_time, now)if err : sess.Save(); err ! nil {panic(err)}}} } 缺点由于这种方式每次都要从Redis中读写数据在高并发中并不适合。
http://www.zqtcl.cn/news/816474/

相关文章:

  • 设计师配色网站太原建站模板源码
  • 学计算机的做网站的叫什么工作wordpress商用收费不
  • 青岛网站建设谁家好一些网页微信怎么登陆
  • 企业网站seo优做网站的旅行社
  • 十大免费自助建站上传网站到空间
  • 深圳企业做网站简约个人网站
  • 茂名放心营销网站开发网站怎么做app
  • php语言 网站建设专业的外贸网站建设公司价格
  • 看英语做游戏的网站wordpress与微信对接
  • 企业网站打不开了看守所加强自身网站建设工作
  • 长汀网站建设做电池的有哪些网站
  • 做软件常用的网站厦门建设局地址
  • 沭阳三剑客做网站科技 公司 响应式 网站
  • 深圳网站建设培训哪家好曲阜网架公司
  • wordpress建立网站实例贵阳网站开发谁家做的好
  • 百度网站推广怎么收费中国科技成果
  • 枣庄企业网站建设wordpress 评论群发
  • 网站视觉设计方案视频制作素材
  • 哪个网站专做民宿wordpress 主题教程
  • 网站后台 设计北京海淀区官网
  • 公司官网网站建设想法wordpress oss
  • 如何自己创建网站招聘网站代理
  • 手机网页视频提取工具seo网站是什么
  • seo网站优化公司龙岩网站设计一般要多久
  • 江苏自助建站系统哪家好go语言网站开发
  • 建设网站 注册与登陆wordpress产品上传
  • 河北省住房与建设厅网站陶瓷刀具网站策划书
  • 大型商城网站建设方案程序外包
  • 邵阳网站建设制作电子商务网站开发软件
  • 怎样推广网站平台树莓派 wordpress mysql