0
我使用Golang Beego的包裹會議。用戶登錄時 - 會話在服務器端創建,客戶端獲取cookie。例如,會話和cookie的到期日期都是10秒。我經常向服務器發送請求,但仍然在幾秒鐘後(甚至不到10),我正在註銷 - 這很糟糕。戈蘭與Beego有效期限的會議
這裏是一個小工作示例:
package main
import (
"fmt"
"net/http"
"github.com/astaxie/beego/session"
)
var globalSessions *session.Manager
func sessionExists(w http.ResponseWriter, r *http.Request) bool {
sess, err := globalSessions.SessionStart(w, r)
defer sess.SessionRelease(w)
if err != nil {
fmt.Println("Error to start session: " + err.Error())
return false
}
if sessUsername := sess.Get("username"); sessUsername == nil {
return false
}
return true
}
func login(w http.ResponseWriter, r *http.Request) {
sess, err := globalSessions.SessionStart(w, r)
defer sess.SessionRelease(w)
if err != nil {
fmt.Println("Error to start session: " + err.Error())
return
}
sess.Set("username", "user")
http.Redirect(w, r, "/", http.StatusSeeOther)
}
func handler(w http.ResponseWriter, r *http.Request) {
if !sessionExists(w, r) {
fmt.Fprintf(w, "NOT logged in")
} else {
fmt.Fprintf(w, "Logged in")
}
}
func main() {
globalSessions, _ = session.NewManager("memory", &session.ManagerConfig{
CookieName: "msessionid",
EnableSetCookie: true,
Gclifetime: 2,
Maxlifetime: 10,
CookieLifeTime: 10})
go globalSessions.GC()
http.HandleFunc("/", handler)
http.HandleFunc("/login", login)
err := http.ListenAndServe("0.0.0.0:9998", nil)
if err != nil {
fmt.Println("Can't start HTTP listener")
}
}
..啓動它,去localhost:9998/login
- 你會看到Logged in
和將被重定向到主頁。每秒刷新一次 - 幾秒鐘後,您將得到一個NOT logged in
響應。我想每個請求都會在服務器端更新會話的到期日期。
我錯過了什麼?或者這是一個會話包中的錯誤?