gpt4 book ai didi

go - 马提尼 session 不会在请求之间移动

转载 作者:数据小太阳 更新时间:2023-10-29 03:28:52 25 4
gpt4 key购买 nike

我正在使用 martini-contrib session 库编写一个网络应用程序。我似乎遇到了一个问题。我的 session 似乎没有在浏览器中的请求之间移动。

我已严格遵循示例代码中概述的准则,但我的代码无法正常工作。以下是相关部分:

登录页面:

 m.Get("/login", binding.Bind(LoginForm{}), func(r render.Render, session sessions.Session, form LoginForm) string {
// Get info from the database.
conn, err := sql.Open("sqlite3", "ocdns.db")
defer conn.Close()

// Prepare the statement.
stmt, err := conn.Prepare(`
SELECT user_id, username, name_first, name_last, role, team_id
FROM User
WHERE username = ? AND password = ?
LIMIT 1;
`)
if err != nil {
log.Fatal(err)
}
defer stmt.Close()

// Query the database and set appropriate items if a row was actually returned.
var id string
var username string
var name_first string
var name_last string
var role string
var team_id string

err = stmt.QueryRow(form.Username, form.Password).Scan(&id, &username, &name_first, &name_last, &role, &team_id)

if err != nil {
log.Print("!! Bad login from " + form.Username + " with " + form.Password)
log.Fatal(err)
} else {
log.Print(">" + id + "<")
log.Print(">" + username + "<")
log.Print(">" + name_first + "<")
log.Print(">" + name_last + "<")
log.Print(">" + role + "<")
log.Print(">" + team_id + "<")
session.Set("id", id)
session.Set("username", username)
session.Set("name_first", name_first)
session.Set("name_last", name_last)
session.Set("role", role)
session.Set("team_id", team_id)

v := session.Get("name_first")
if v == nil {
log.Print("!! Uh oh.")
}
log.Print(v.(string))

return "OK"
}

return "Bad"
})

session 检查页面:

  m.Get("/session", func(session sessions.Session) string {
var c Context

i := session.Get("id")
if i == nil {
c.Id = -1
}

c.Id, _ = strconv.Atoi(i.(string))


i = session.Get("username")
if i == nil {
log.Print("!! username")
}

if vs, ok := i.(string); ok {
c.Username = vs
} else {
log.Print(vs)
}

log.Print(c)

j, _ := json.Marshal(c)

return string(j)
})

上下文结构:

type Context struct {
Id int `json:"id"`
Username string `json:"username"`
NameFirst string `json:"name_first"`
NameLast string `json:"name_last"`
Role string `json:"role"`
TeamId int `json:"team_id"`
}

最后,我的 session 声明:

// Create session store.
store := sessions.NewCookieStore([]byte("secret123"))
m.Use(sessions.Sessions("my_session", store))

我曾尝试清空缓存以使其正常工作,但没有成功。我确实查看了 Chrome 的开发人员工具以查看是否正在使用存储,我确实发现 session 在两个页面之间移动,但是 session 请求的输出是一个空的 Context json结构。

我需要弄清楚为什么我的 session 数据似乎在请求之间丢失,以及我可以采取什么措施来修复它。我查看过这里,虽然没有任何内容符合我的确切问题,但我确实发现有些问题的 Web 服务器配置有问题。

提前致谢!

最佳答案

您应该按如下方式更改您的第一个函数调用,以确保它必须先转到 session 才能登录。

m.Get("/login", SOME_FUNC_TO_SEESION, func(r render.Render, session sessions.Session, form LoginForm) string {

这是一个示例视频,希望对您有所帮助。您的代码应该运行良好。 https://gophercasts.io/lessons/8-auth-part-2

关于go - 马提尼 session 不会在请求之间移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27435860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com