多用户session例子
时间: 2023-09-25 19:10:42 浏览: 46
以下是一个简单的多用户 session 示例:
```go
package main
import (
"fmt"
"net/http"
"github.com/gorilla/sessions"
)
var (
store = sessions.NewCookieStore([]byte("secret"))
)
func main() {
http.HandleFunc("/", index)
http.HandleFunc("/login", login)
http.HandleFunc("/dashboard", dashboard)
http.ListenAndServe(":8080", nil)
}
func index(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "session-name")
if session.Values["authenticated"] == true {
http.Redirect(w, r, "/dashboard", http.StatusSeeOther)
return
}
fmt.Fprint(w, "Index Page")
}
func login(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "session-name")
username := r.FormValue("username")
password := r.FormValue("password")
if username == "user1" && password == "password1" {
session.Values["authenticated"] = true
session.Values["username"] = username
session.Save(r, w)
http.Redirect(w, r, "/dashboard", http.StatusSeeOther)
return
}
http.Redirect(w, r, "/", http.StatusSeeOther)
}
func dashboard(w http.ResponseWriter, r *http.Request) {
session, _ := store.Get(r, "session-name")
if session.Values["authenticated"] != true {
http.Redirect(w, r, "/", http.StatusSeeOther)
return
}
username := session.Values["username"].(string)
fmt.Fprintf(w, "Welcome %s to Dashboard", username)
}
```
在这个示例中,我们首先在 `index` 处理函数中检查用户是否已经通过身份验证并重定向到仪表板页面。如果用户没有通过身份验证,则显示登录表单。
在 `login` 处理函数中,我们检查用户提供的用户名和密码是否匹配。如果用户名和密码匹配,则设置 `authenticated` 和 `username` session 值,保存 session 并重定向到仪表板页面。如果用户名和密码不匹配,则重定向回主页。
在 `dashboard` 处理函数中,我们首先检查用户是否已通过身份验证。如果没有,则重定向回主页。如果用户已通过身份验证,则从 session 中获取用户名并欢迎用户进入仪表板页面。