在 golang 中检查 HTML 文件中的用户会话

Khr*_*rya 5 session go

如何直接在 HTML 文件中检查用户登录会话?我已经在谷歌上搜索过了,但我无法直接在html文件中找到检查会话,是不是不可能这样做?

我唯一能找到的就是绕过它ExecuteTemplate(),这是我唯一能做的吗?

Ken*_*ant 0

我认为根据您的描述,您在 .go 文件(handlerfunc)中有一个可访问的会话变量,并且希望在 html 文件中使用它。这个比较简单,就是一个值而已。是的,通过 ExecuteTemplate 传递它是正确的方法。会话只是随浏览器向服务器发出的请求一起发送的 cookie,它位于请求标头中。

您可以在模板的 func 集中设置一个 func 来访问某种全局变量,但是这样您就会遇到跨 goroutine 同步的问题(每个请求处理程序都在 goroutine 中运行),因此更简单的方法是最好的。

您不应该尝试在模板中对会话执行操作,例如解密和提取用户 ID - 这更适合您的处理程序,并且在模板中更安全。

首先使用您首选的库从 cookie 中提取它(您正在加密您的会话,对吧?),然后将其添加到视图上下文中(假设您使用值映射)。

// use a lib like gorilla sessions
session, err := store.Get(r, "session-name")
userID := session.Get("user")

// store data (here in a map[string]interface{})
data := make(map[string]interface{})
data["userID"] = userID 

// Send this data to the view
t.Execute(w, data) // Sets the . variable in templates
Run Code Online (Sandbox Code Playgroud)

然后在视图中,只需使用类似这样的方法来访问您需要的值:

{{ .userID }}
Run Code Online (Sandbox Code Playgroud)

或者,是的,您可以只使用 javascript 来访问会话,但您需要知道它是如何加密的,如果它包含任何有价值的信息,这可能是一个安全漏洞 - 任何 js 可以从您的用户获取的信息也可以获取。