查看“Go网络编程-Sessions”的源代码
←
Go网络编程-Sessions
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
这个例子将展示如何使用Go中的流行gorilla/sessions包将会话数据存储在会话cookie中。 Cookie是存储在用户浏览器中的小块数据,并在每个请求中发送到我们的服务器。在其中,我们可以存储例如用户是否登录到我们的网站以及他在我们系统中的实际身份。 在这个例子中,我们只允许经过身份验证的用户查看/secret页面上的秘密消息。要获得访问权限,他们首先必须访问/login以获取有效的会话cookie,从而登录。此外,他还可以通过访问/logout来撤销对我们秘密消息的访问权限。 <br> <syntaxhighlight lang="go">// sessions.go package main import ( "fmt" "net/http" "github.com/gorilla/sessions" ) var ( // key must be 16, 24 or 32 bytes long (AES-128, AES-192 or AES-256) key = []byte("super-secret-key") store = sessions.NewCookieStore(key) ) func secret(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "cookie-name") // Check if user is authenticated if auth, ok := session.Values["authenticated"].(bool); !ok || !auth { http.Error(w, "Forbidden", http.StatusForbidden) return } // Print secret message fmt.Fprintln(w, "The cake is a lie!") } func login(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "cookie-name") // Authentication goes here // ... // Set user as authenticated session.Values["authenticated"] = true session.Save(r, w) } func logout(w http.ResponseWriter, r *http.Request) { session, _ := store.Get(r, "cookie-name") // Revoke users authentication session.Values["authenticated"] = false session.Save(r, w) } func main() { http.HandleFunc("/secret", secret) http.HandleFunc("/login", login) http.HandleFunc("/logout", logout) http.ListenAndServe(":8080", nil) }</syntaxhighlight> <br> <syntaxhighlight lang="shell">$ go run sessions.go $ curl -s http://localhost:8080/secret Forbidden $ curl -s -I http://localhost:8080/login Set-Cookie: cookie-name=MTQ4NzE5Mz... $ curl -s --cookie "cookie-name=MTQ4NzE5Mz..." http://localhost:8080/secret The cake is a lie!</syntaxhighlight> <br>
返回至“
Go网络编程-Sessions
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
查看
阅读
查看源代码
查看历史
更多
搜索
导航
首页
基础知识
正则表达式
Markdown
分布式
项目管理
系统集成项目管理基础知识
云原生
Docker
云原生安全
云原生词汇表
十二因素应用
Kubernetes
音频处理
音频合成
Edge-tts
CMS系统
Docsify
VuePress
Mediawiki
自动生成
Marp
CI/CD
GitLab
设计
颜色
平面设计
AI
数字人
操作系统
GNU/Linux
数据库
Mysql
工具
链入页面
相关更改
特殊页面
页面信息