如何在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
答案 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"