如何在Revel上使用基于Redis的会话

时间:2014-06-11 06:44:52

标签: session go redis revel

如何在Revel上使用基于redis的会话?

我找到this gist,但不知道如何使用它。

编辑#1:

我的env变量

GOROOT --> /usr/lib/go
GOPATH --> /home/asd/Dropbox/go

我做了什么:

mkdir -p $GOPATH/src/myapp/app/libs/session
curl https://gist.githubusercontent.com/xthexder/9026678/raw/9e40fb56d8991de945a2064b6869bb7280b1305a/session.go \
 > $GOPATH/src/myapp/app/libs/session/session.go
go get github.com/garyburd/redigo
go get github.com/robfig/revel

import "myapp/app/libs/session"上添加init.go,此错误会显示:

Go Compilation Error
The Go code Dropbox/go/src/myapp/app/libs/session/session.go does not compile: undefined: Redis

In Dropbox/go/src/myapp/app/libs/session/session.go (around line 75)
70:         panic("Session values may not have null bytes")
71:     }
72:     sessionValue += "\x00" + key + ":" + value + "\x00"
73: }
74:
75: redisConn := Redis.Get()
76: defer redisConn.Close()
77:
78: params := []interface{}{"session:" + sessionToken, sessionValue}
79: if expireAfterDuration != 0 {    

控制台上的错误:

WARN  2014/06/11 20:11:15 build.go:132: Cannot determine git repository version: exit status 128
ERROR 2014/06/11 20:11:15 build.go:84: # myapp/app/libs/session
Dropbox/go/src/myapp/app/libs/session/session.go:75: undefined: Redis
Dropbox/go/src/myapp/app/libs/session/session.go:126: undefined: Redis
Dropbox/go/src/myapp/app/libs/session/session.go:129: not enough arguments in call to redis.String
Dropbox/go/src/myapp/app/libs/session/session.go:172: undefined: Redis
Dropbox/go/src/myapp/app/libs/session/session.go:175: not enough arguments in call to redis.Int

2 个答案:

答案 0 :(得分:1)

看起来Gist已经过时了。 错误就在你的问题中 Redis未定义。

首先包名称应为小写,立即为红旗。看看github你可以看到包(现在)应该是小写的。

答案 1 :(得分:0)

没关系,我自己解决,修改http://www.diffchecker.com/n0k0fy8w上显示的session.go代码

更改init.go
revel.SessionFilter,           // Restore and write the session cookie.

app.SessionFilter,

在控制器/动作上检查它:

x, _ := strconv.ParseInt(c.Session["test"], 0, 64)
x += 1
c.Session["test"] = fmt.Sprintf("%d", x)
return c.Render(x)

并在模板上

{{.x}}

访问该页面,并使用redis-cli验证它

$ redis-cli get `redis-cli --scan 'session:*'`
"\x00test:15\x00"