package lib import ( "crypto/rand" "encoding/base64" "net/http" ) const session_cookie_name = "shop_session" func Get_Session_ID(r *http.Request) string { cookie, err := r.Cookie(session_cookie_name) if err != nil { return "" } return cookie.Value } func Set_Session_ID(w http.ResponseWriter, session_id string) { http.SetCookie(w, &http.Cookie{ Name: session_cookie_name, Value: session_id, Path: "/", HttpOnly: true, SameSite: http.SameSiteLaxMode, MaxAge: 86400 * 7, }) } func Generate_Session_ID() string { b := make([]byte, 32) rand.Read(b) return base64.URLEncoding.EncodeToString(b) } func Get_Or_Create_Session_ID(w http.ResponseWriter, r *http.Request) string { session_id := Get_Session_ID(r) if session_id == "" { session_id = Generate_Session_ID() Set_Session_ID(w, session_id) } return session_id }