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

Session 如何在Revel上使用基于Redis的会话,session,go,redis,revel,Session,Go,Redis,Revel,如何使用基于redis的会话 我找到了,但不知道怎么用 编辑1: 我的环境变量 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/9e40fb56d8991de945a2064b6869bb7280b13

如何使用基于redis的会话

我找到了,但不知道怎么用

编辑1:

我的环境变量

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
在init.go上添加import myapp/app/libs/session,出现以下错误:

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

看来要点已经过时了。 错误就在你的问题中。 Redis没有定义


首先,包名应该是小写的,一个直接的红色标志。查看github,您可以看到该包现在是小写的。

不过,我自己解决了它,修改session.go代码,如所示

更改init.go from

进入

要在控制器/操作上检查它,请执行以下操作:

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"

到目前为止你试过什么?要点相当全面:它有一个init函数、一个保存和恢复get session函数,这些函数进入HTTP处理程序、一个revoke session helper和一个中间件。首先,我应该将文件session.go放在哪里?最终,这并不重要,但要保持简单:将它放在主包中,与其他所有内容一起。Go看不到文件,但看不到包。我建议阅读谷歌it和Revel文档,或者使用一套更简单的工具来学习net/http、Gorilla或Goji。基于Redis的会话很棒,但听起来好像你已经超越了自己,通过HTTPS加密的cookies仍然很好;只是不要把敏感的东西放在里面。你应该坐下来读。是的,这是我学习围棋的第三天,两天前我读了围棋编程语言手册和围棋编程,昨天我读了Revel教程和文档,无论如何谢谢。。
{{.x}}
$ redis-cli get `redis-cli --scan 'session:*'`
"\x00test:15\x00"