为了账号安全,请及时绑定邮箱和手机立即绑定

跨多个包的全局会话管理的命名空间/范围问题

跨多个包的全局会话管理的命名空间/范围问题

Go
MMMHUHU 2021-10-11 13:49:15
首先让我说我是 Golang 的新手。与它一起工作了几个星期。真的很喜欢这种语言,但是......我在 Golang 的全局会话管理方面遇到了一些麻烦。我看到它是如何工作的,如果范围全部在一个包中,我可以让它工作,但是我最近刚刚为我的每个 go 文件创建了新包。我这样做是因为我读到这是最佳实践并且有利于可重用性。自从我将 go 文件移到它们自己的包而不是一个包中后,会话管理就中断了。它看起来每次都创建一个新会话,而不是重用现有会话。下面是一些代码,让您了解我在做什么:package mainimport (    "net/http"    "api/login"    "api/globalsessionkeeper"    "github.com/astaxie/beego/session")func main() {    http.HandleFunc("/login", login.DoLogin)    og.Fatal(http.ListenAndServe(":8000", nil))}func Index(w http.ResponseWriter, r *http.Request) {    fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path))}func init() {    var err error    fmt.Println("Session init")    globalsessionkeeper.GlobalSessions, err = session.NewManager("mysql", `{"enableSetCookie":true, "SessionOn":true, "cookieName":"globalsession_id","gclifetime":120,"ProviderConfig":"root@tcp(172.16.0.23:3306)/databse"}`)    if err != nil {        fmt.Printf("Error")    }    globalsessionkeeper.GlobalSessions.SetSecure(true)    go globalsessionkeeper.GlobalSessions.GC()}包 globalsessionkeeper (我创建这个只是为了我可以在所有其他包中重用全局变量......即“包登录”......等)package globalsessionkeeperimport (    "github.com/astaxie/beego/session"    _ "github.com/astaxie/beego/session/mysql")//Global Variablevar GlobalSessions *session.Manager}数据库有正确的条目。它具有为它创建的每个会话存储的唯一值。这里还有一些输出:answer = trueuniquvalue not found, Saving Session, Get has &{0xc208046b80 f08u0489804984988494994 {{0 0} 0 0 0 0} map[]}uniquevalue not found, Saving Session, Get has <nil>2015/06/06 17:32:26 http: multiple response.WriteHeader calls当然,多重 response.WriteHeader 是我必须纠正的另一件事。go 例程最初发送的是 200OK,但我想将其更改为 204 无内容,但是一旦我这样做,它就开始给我错误。
查看完整描述

1 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

事实证明这一直在起作用。我将错误的 cookie 值传递回 api。愚蠢的错误会导致各种头痛。


查看完整回答
反对 回复 2021-10-11
  • 1 回答
  • 0 关注
  • 150 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信