0
私はGolangを使用しますBeegoのパッケージセッションユーザーがログインすると、セッションはサーバー側で作成され、クライアントはCookieを取得します。たとえば、セッションとCookieの両方の有効期限は10秒です。私は頻繁にサーバーに十分なリクエストを送信しますが、数秒後でも(10未満の場合でも)ログアウトされています。これは悪いことです。Beego有効期限を持つGolangセッション
はここで小さな作業例です:
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
という応答が得られます。私はすべてのリクエストがサーバー側でセッションの有効期限を更新すると思っていました。
私には何が欠けていますか?またはこれはセッションパッケージのバグですか?