beego——session模块

session介绍

session是一个独立的模块,即你可以那这个模块应用于其它Go程序中。

session模块是用来存储客户端用户,session目前只支持cookie方式的请求,如果客户端不支持cookie,那么就无法使用该模块。

session模块参考了database/sql的引擎写法,采用了一个接口,多个实现的方式。

目前实现了memory、file、Redis和MySQL四种存储引擎。

通过下面的方式安装session:

go get github.com/astaxie/beego/session

  

session使用

首先你必须导入包:

import (
    "github.com/astaxie/beego/session"
)

然后你初始化一个全局变量用来存储session控制器:

var globalSessions *session.Manager

接着在你的入口函数中初始化数据:

func init() {
        sessionConfig := &session.ManagerConfig{
    CookieName:"gosessionid",
    EnableSetCookie: true,
    Gclifetime:3600,
    Maxlifetime: 3600,
    Secure: false,
    CookieLifeTime: 3600,
    ProviderConfig: "./tmp",
    }
    globalSessions, _ = session.NewManager("memory",sessionConfig)
    go globalSessions.GC()
}

NewManager函数的参数的函数如下所示:

(1)引擎名字,可以是 memory、file、mysql 或 redis。

(2)一个 JSON 字符串,传入 Manager 的配置信息

  cookieName:客户端存储 cookie 的名字。

  enableSetCookie,omitempty: 是否开启 SetCookie,omitempty 这个设置

  gclifetime:触发 GC 的时间。

  maxLifetime:服务器端存储的数据的过期时间

  secure:是否开启 HTTPS,在 cookie 设置的时候有 cookie.Secure 设置。

  sessionIDHashFunc:sessionID 生产的函数,默认是 sha1 算法。

  sessionIDHashKey: hash 算法中的 key。

  cookieLifeTime:客户端存储的 cookie 的时间,默认值是 0,即浏览器生命周期。

  providerConfig: 配置信息,根据不同的引擎设置不同的配置信息,详细的配置请看下面的引擎设置

最后我们的业务逻辑处理函数中可以这样调用:

func login(w http.ResponseWriter, r *http.Request) {
    sess, _ := globalSessions.SessionStart(w, r)
    defer sess.SessionRelease(w)
    username := sess.Get("username")
    if r.Method == "GET" {
        t, _ := template.ParseFiles("login.gtpl")
        t.Execute(w, nil)
    } else {
        sess.Set("username", r.Form["username"])
    }
}

globalSessions 有多个函数如下所示:

  • SessionStart 根据当前请求返回 session 对象
  • SessionDestroy 销毁当前 session 对象
  • SessionRegenerateId 重新生成 sessionID
  • GetActiveSession 获取当前活跃的 session 用户
  • SetHashFunc 设置 sessionID 生成的函数
  • SetSecure 设置是否开启 cookie 的 Secure 设置

返回的 session 对象是一个 Interface,包含下面的方法

  • Set(key, value interface{}) error
  • Get(key interface{}) interface{}
  • Delete(key interface{}) error
  • SessionID() string
  • SessionRelease()
  • Flush() error

引擎设置

上面已经展示了 memory 的设置,接下来我们看一下其他三种引擎的设置方式:

(1)mysql

  其他参数一样,只是第四个参数配置设置如下所示:

username:[email protected](address)/dbname?param=value

(2)redis

  配置文件信息如下所示,表示链接的地址,连接池,访问密码,没有保持为空:

  注意:若使用redis等引擎作为session backend,请在使用前导入 < _ “github.com/astaxie/beego/session/redis” >

(3)file

配置文件如下所示,表示需要保存的目录,默认是两级目录新建文件,例如 sessionID 是 xsnkjklkjjkh27hjh78908,那么目录文件应该是 ./tmp/x/s/xsnkjklkjjkh27hjh78908

./tmp

  

如何创建自己的引擎

在开发应用中,你可能需要实现自己的 session 引擎,beego 的这个 session 模块设计的时候就是采用了 interface,所以你可以根据接口实现任意的引擎,例如 memcache 的引擎。

type SessionStore interface {
    Set(key, value interface{}) error //set session value
    Get(key interface{}) interface{}  //get session value
    Delete(key interface{}) error     //delete session value
    SessionID() string                //back current sessionID
    SessionRelease()                  // release the resource & save data to provider
    Flush() error                     //delete all data
}

type Provider interface {
    SessionInit(maxlifetime int64, savePath string) error
    SessionRead(sid string) (SessionStore, error)
    SessionExist(sid string) bool
    SessionRegenerate(oldsid, sid string) (SessionStore, error)
    SessionDestroy(sid string) error
    SessionAll() int //get all active session
    SessionGC()
}

最后需要注册自己写的引擎:

func init() {
    Register("own", ownadaper)
}

  

原文地址:https://www.cnblogs.com/yangmingxianshen/p/10127482.html

时间: 2024-10-30 00:30:02

beego——session模块的相关文章

CentOS7.2 负载均衡层nginx-1.10.1增加sticky session模块支持

大家的网站都难免会遇到验证码的议题,前台后台的登入,都需要有验证码来做登入校验. 因为有些应用的验证码是在系统缓存中产生的,如果你使用的是负载均衡,那可能就会出现和我一样的情况:在验证验证码时,负载均衡在起着作用,用户访问的页面因在两台服务器间承接跳转的,会导致用户一直无法验证成功,所以在负载均衡上需要做sticky session支持,才能解决此问题. 所以我就要着手去处理这个问题. 安装环境及软件版本: 操作系统版本:CentOS 7.2 64bit 负载均衡层:nginx-1.10.1 服

go系列(6)- beego日志模块的使用

1.安装日志模块 切换到工作目录,下载日志模块 cd /data/work/go/ go get github.com/astaxie/beego/logs 2.导入日志模块 使用的时候,需要导入模块 import ( "github.com/astaxie/beego/logs" ) 3.设置参数 输出文件名和行号,日志默认不输出调用的文件名和文件行号,如果你期望输出调用的文件名和文件行号,可以如下设置 logs.EnableFuncCallDepth(true) 开启传入参数 tr

beego的session使用方法

beego内置了session模块,目前session模块支持后端引擎包括memory,cookie,file,mysql,redis,couchbase,memcache,postgres,用户也可以根据相应的interface实现自己的引擎. 默认引擎是memory(内存) 关于 Session 模块使用中的一些参数设置: beego.BConfig.WebConfig.Session.SessionOn 设置是否开启 Session,默认是 false,配置文件对应的参数名:session

beego的context 模块

上下文模块 上下文模块主要是针对 HTTP 请求中,request 和 response 的进一步封装,他包括用户的输入和输出,用户的输入即为 request,context 模块中提供了 Input 对象进行解析,用户的输出即为 response,context 模块中提供了 Output 对象进行输出. context 对象 context 对象是对 Input 和 Output 的封装,里面封装了几个方法: Redirect Abort WriteString GetCookie SetC

node.js平台下Express的session与cookie模块包的配置

首先下载两个模块包 session模块包:用于保持登录状态或保持会话状态等. npm install express-session --save-dev cookie模块包:用于解析cookie. npm install cookie-parser --save-dev 接着在app.js(我在node.js的配置中提到的,也就是服务器主文件)中配置: var session = require("express-session"); var cookie = require(&qu

Flask 框架中 上下文基础理念,包括cookie,session存储方法,requset属性,current_app模块和g模块

Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享,就是把东西存储在变量里可以打印预览,应用上下文包括 current_app模块和g模块 cookie方法增,查,删. 注:存储cookie时使用set_coooki方法存储key--calve形式数据,另一个参数max_age 是指定的存活时间. 调用cookie的方法是通过request模块的c

beego的MVC架构介绍

beego 的 MVC 架构介绍 beego 是一个典型的 MVC 框架,它的整个执行逻辑如下图所示: 通过文字来描述如下: 在监听的端口接收数据,默认监听在 8080 端口. 用户请求到达 8080 端口之后进入 beego 的处理逻辑. 初始化 Context 对象,根据请求判断是否为 WebSocket 请求,如果是的话设置 Input,同时判断请求的方法是否在标准请求方法中(“get“”post“”put“”delete“”patch“”options“”head“),防止用户的恶意伪造

beego 框架基本使用 &amp;&amp; 知识点整理

beego 官网的教程已经整理的非常详细了,但作为一个刚接触的学习者,还是有必要做一下整理,这样在后面使用的时候遇到了不太熟悉的地方,还能反过头来看下自己整理的内容,快速的把知识再捞回来,下面是对官网的一个精简整理,同时结合一些例子,更好的理解和使用 beego 这个框架去做一些 web 开发 beego 官网地址:https://beego.me beego 与 bee 的安装 //beego 框架 go get github.com/astaxie/beego //bee工具 go get

Beego Conf 文件配置解析

Beego 默认系统配置为conf文件夹下的app.conf文件:那么app.conf里面的具体配置属性都是什么意思,接下来一一的进行解释: beege程序默认app.conf 在beego程序中读取app.conf中的配置内容可以使用:beego.AppConfig.String("appname") app.conf系统配置内容 AppName应用名称,默认是 beego.通过 bee new 创建的是创建的项目名.beego.BConfig.AppName = "bee