Gorilla 세션 구현에서 세션 변수가 요청 전반에 걸쳐 유지되지 않습니다. . 로그인하고 세션 변수를 설정한 후 새 탭에서 세션을 유지해야 하는데 대신 사용자가 로그인 페이지로 리디렉션됩니다.
<code class="go">sessionNew.Save(req, res)</code>
이 코드 누락 오류 sessionNew.Save() 처리. 저장 프로세스가 실패하면 오류가 무시되어 예기치 않은 동작이 발생합니다. 다음으로 업데이트해야 합니다.
<code class="go">err := sessionNew.Save(req, res) if err != nil { // Handle the error }</code>
세션 경로는 "/loginSession"으로 설정되어 세션 범위를 해당 특정 경로로만 제한합니다. 다른 경로를 방문하는 사용자는 세션에 액세스할 수 없기 때문에 혼란이 발생할 수 있습니다. 모든 경로에서 세션을 사용할 수 있도록 하려면 경로를 "/"로 설정해야 합니다.
SessionHandler에서는 정적 파일을 제공한 후 세션 확인이 수행됩니다. 세션이 검증되기 전에 정적 파일이 제공되기 때문에 문제가 발생할 수 있습니다. 콘텐츠를 제공하기 전에 세션 확인을 수행해야 합니다.
<code class="go">package main import ( "crypto/md5" "encoding/hex" "fmt" "github.com/gocql/gocql" "github.com/gorilla/mux" "github.com/gorilla/sessions" "net/http" "time" ) var store = sessions.NewCookieStore([]byte("something-very-secret")) var router = mux.NewRouter() func init() { store.Options = &sessions.Options{ Domain: "localhost", Path: "/", MaxAge: 3600 * 8, // 8 hours HttpOnly: true, } } func main() { //session handling router.HandleFunc("/", sessionHandler) router.HandleFunc("/signIn", signInHandler) router.HandleFunc("/signUp", signUpHandler) router.HandleFunc("/logOut", logOutHandler) http.Handle("/", router) http.ListenAndServe(":8100", nil) } //handler for signIn func signInHandler(res http.ResponseWriter, req *http.Request) { // Get the session session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } // Set session values session.Values["email"] = req.FormValue("email") session.Values["name"] = req.FormValue("password") // Save the session err = session.Save(req, res) if err != nil { // Handle the error } } //handler for signUp func signUpHandler(res http.ResponseWriter, req *http.Request) { // ... } //handler for logOut func logOutHandler(res http.ResponseWriter, req *http.Request) { // Get the session session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } // Save the session (with updated values) err = session.Save(req, res) if err != nil { // Handle the error } } //handler for Session func sessionHandler(res http.ResponseWriter, req *http.Request) { // Get the session session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } // Check if the session is valid if session.Values["email"] == nil { http.Redirect(res, req, "html/login.html", http.StatusFound) } else { http.Redirect(res, req, "html/home.html", http.StatusFound) } }</code>
위 내용은 내 Golang 세션 변수가 Gorilla 세션에 저장되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!