Gorilla 세션을 사용하여 세션 처리에 대한 지원 요청에서 요청 전반에 걸쳐 세션 값이 유지되지 않는 문제를 설명하셨습니다. .
한 가지 잠재적인 문제는 세션 저장소에 대해 설정하는 경로에 있습니다. 경로를 /loginSession으로 설정하면 세션의 유효성이 해당 특정 경로로 제한됩니다. 모든 경로에서 세션의 일관성을 보장하려면 대신 경로를 /로 설정해야 합니다.
store.Options = &sessions.Options{ Domain: "localhost", Path: "/", MaxAge: 3600 * 8, HttpOnly: true, }
고려해야 할 또 다른 사항은 세션 값을 확인하는 방법입니다. session.Values["email"] == nil을 사용하는 대신 빈 값을 올바르게 처리하려면 문자열에 값을 입력해야 합니다.
if val, ok := session.Values["email"].(string); ok { // if val is a string switch val { case "": http.Redirect(res, req, "html/login.html", http.StatusFound) default: http.Redirect(res, req, "html/home.html", http.StatusFound) } } else { // if val is not a string type http.Redirect(res, req, "html/login.html", http.StatusFound) }
세션을 저장할 때 오류도 확인해야 합니다.
err := sessionNew.Save(req, res) if err != nil { // handle the error case }
마지막으로 SessionHandler 함수에서 정적 파일을 제공하기 전에 세션을 가져오고 유효성을 검사하는지 확인하세요.
func SessionHandler(res http.ResponseWriter, req *http.Request) { session, err := store.Get(req, "loginSession") if err != nil { // Handle the error } if session.Values["email"] == nil { http.Redirect(res, req, "html/login.html", http.StatusFound) } else { http.Redirect(res, req, "html/home.html", http.StatusFound) } }
이러한 문제를 해결하면 다음을 보장할 수 있습니다. 세션 변수는 Gorilla 세션을 사용하는 요청 전체에서 올바르게 보존됩니다.
위 내용은 Gorilla 세션을 사용하여 내 세션 변수가 보존되지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!