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:password@protocol(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)
}

  

beego——session模块的更多相关文章

  1. beego——session控制

    beego内置了session模块,目前session模块支持的后端引擎包括memory.cookie.file.mysql.redis.couchbase.memcache.postgres, 用户 ...

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

    1.安装日志模块 切换到工作目录,下载日志模块 cd /data/work/go/ go get github.com/astaxie/beego/logs 2.导入日志模块 使用的时候,需要导入模块 ...

  3. beego 初体验 - 基础模块 - session, cookie

    beego 内建 session 模块 首先,需要在项目中开启 Session,两种方式,以编码的方式或配置 这是代码实现: 配置文件: 这是调用:

  4. Go语言之高级篇beego框架之cookie与session

    1.cookie的用法 this.Ctx.SetCookie("name", name, maxage, "/") this.Ctx.SetCookie(&qu ...

  5. 4. Beego 框架之cookie与session

    what is cookie? cookie是存储在客户端的,用于标识客户身份的! what is session session 是存储在服务端,也是用于客户身份标识,用于跟踪用户会话. BeeGo ...

  6. Beego 学习笔记14:Session控制

    Session控制 1>     Session常用来作为全局变量使用,比如记录当前登录的用户,或者页面之间传递数据使用. 2>     Beego框架内置了 session 模块,目前 ...

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

    首先下载两个模块包 session模块包:用于保持登录状态或保持会话状态等. npm install express-session --save-dev cookie模块包:用于解析cookie. ...

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

    Flask中上下文,分为请求上下文和应用上下文.既状态留存 ,就是把变量存在某一个地方可以调用 请求上下文:实际就是request和session用法理念,既都是可以存储东西. 应用上下文:既变量共享 ...

  9. Go语言之高级篇beego框架之config、httplib、context

    一.httplib 1.配置文件解析 这是一个用来解析文件的库,它的设计思路来自于 database/sql,目前支持解析的文件格式有 ini.json.xml.yaml,可以通过如下方式进行安装: ...

随机推荐

  1. 【BZOJ】1009: [HNOI2008]GT考试(dp+矩阵乘法+kmp+神题)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1009 好神的题orzzzzzzzzzz 首先我是连递推方程都想不出的人...一直想用组合来搞..看来 ...

  2. 【SSH】远程下载

    scp -r root@123.67.11.93:/var/lamp/abc.txt   ./

  3. SQLMap用户手册二

      http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 当给sqlmap这么一个url的时候,它会: 1.判断可注入的参数 2.判断可以用那种SQ ...

  4. ajax 请求登录超时跳转登录页的示例代码

    Ajax AJAX即“Asynchronous Javascript + XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术. 在Filter里判断是否登录,如果未 ...

  5. jQuery功能函数详解

    jQuery通过$.browser对象获取浏览器信息. 属性 说明msie 如果是ie为true,否则为falsemozilla 如果是mozilla相关的浏览器为true,否则为falsesafar ...

  6. Using XSLT and Open XML to Create a Word 2007 Document

    Summary: Learn how to transform XML data into a Word 2007 document by starting with an existing docu ...

  7. 运维角度浅谈:MySQL数据库优化

    日志君导读: 一个成熟的数据库架构并非一開始设计就具备高可用.高伸缩等特性的.它是随着用户量的添加,基础架构才逐渐完好. 作者:zhenliang8.本文转自51CTO博客,点击原文阅读查看网页版文章 ...

  8. 表空间_暂时表空间引起的错误:ora-01652 小例

    原创作品,出自 "深蓝的blog" 博客,深蓝的blog:http://blog.csdn.net/huangyanlong/article/details/46888243 报暂 ...

  9. TArray<uint8>转FString

    void ARamaUDPReceiver::Recv(const FArrayReaderPtr& ArrayReaderPtr, const FIPv4Endpoint& EndP ...

  10. 桌面不显示IE图标解决方法

    如果你的是WIN7,恰好你的桌面上IE图标不知道怎么被搞咩了. 向这里看过来,这里有一个文件你正好能用上. 使用方法很简单: 猛戳下载,猛戳两下安装 下载解决