我得到的会话来自我以前的PHP
<?php
session_start();
$_SESSION["key"] = "val";
echo $_SESSION["key"];
?>
在服务器端设置一个或多个密钥及其值,并能够在会话到期之前检索或覆盖它。
与gorilla / sessions相同
var(
sessionStore *sessions.CookieStore
sessionSecret []byte = make([]byte, 64)
session *sessions.Session
)
func init(){
sessionSecret = []byte("12345678901234567890123456789012")
sessionStore = sessions.NewCookieStore(sessionSecret)
session = sessions.NewSession(sessionStore, "session_name")
}
func SetSessionHandler(w http.ResponseWriter, r *http.Request) {
session, _ = sessionStore.Get(r, "session_name")
session.Values["key"] = "val"
session.Save(r, w)
}
func GetSessionHandler(w http.ResponseWriter, r *http.Request) {
session, _ = sessionStore.Get(r, "session_name")
fmt.FPrintln(session.Values["key"])
}
现在我不知道大猩猩/背景的意义。 我知道背景是什么但是......我不知道它是如何适应大局的。 它说它受当前请求的约束。 stackoverflow的另一个问题是,在Writing Per-Handler Middleware的上下文中“简单地使用大猩猩/上下文就足够了”。
但如果它的请求绑定...错误..语法错误,不计算。如果鸭子浮在水面上,那么巫婆就是用木头做的。因为如果她的重量与鸭子的重量相同,鸭子也漂浮在水面上,她必须是女巫。或类似的东西;)
当它受到请求限制时,它如何作为中间件“管理器”有用,我无法在全局设置它。您是否可以举例说明大猩猩/会话如何与大猩猩/上下文一起使用?
答案 0 :(得分:9)
作为提出其他问题的人:
...路由器可以设置从URL中提取的变量,以后应用程序处理程序可以访问这些值,或者它可以用于存储在请求结束时保存的会话值。还有其他几种常见用途。
那你为什么要在会话中使用上下文?它更轻,并允许您将应用程序的某些部分(通常是HTTP中间件!)彼此分离。
示例:
答案 1 :(得分:0)
一个例子。
我正在撰写这个多社区论坛软件。 现在我有一个gorilla / mux路由器为主域提供不同的内容,另一个路由器提供由subdomain.domain.tld过滤的不同内容。
上下文在这里非常有用,否则你会一遍又一遍地重复自己。因此,如果我知道对于子域路由器,每个请求都会执行字符串操作以找出子域名并检查它是否存在于数据库中我可以在此处(在上下文中)为每个请求执行此操作,然后将子域名存储在上下文变量。 同样,如果设置了论坛的类别slug或论坛slug或者线程段塞,则将其传递给处理程序,保持需要在“上下文”中完成的处理,并在处理程序中使用较少的代码。
因此,上下文的优点主要是保持代码DRY。
像elihrar写的那样,他的CSRF令牌的例子。如果您知道需要在每个请求上检查CSRF令牌 - 请不要在每个需要执行此操作的处理程序中复制此检查,而是编写上下文包装器(/ http.Handler)并为每个请求执行此操作。 / p>