"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué no se mantienen las variables de Gorilla Sessions en todas las solicitudes de mi aplicación web?

¿Por qué no se mantienen las variables de Gorilla Sessions en todas las solicitudes de mi aplicación web?

Publicado el 2024-11-12
Navegar:403

Why are Gorilla Sessions Variables Not Maintained Across Requests in My Web Application?

Las variables de sesión en Gorilla Sessions no se mantienen mientras se usan

Problema

Mientras se utiliza el kit de herramientas web de Gorilla Sessions, las variables de sesión no se conservan en todas las solicitudes. Cuando se inicia el servidor y los usuarios visitan localhost:8100/, se les dirige a login.html porque los valores de la sesión no existen. Al iniciar sesión, las variables de la sesión se almacenan y los usuarios son redirigidos a home.html. Sin embargo, abrir una nueva pestaña e ingresar localhost:8100/ dirige a los usuarios a login.html en lugar de home.html como se esperaba, a pesar de la presencia de variables de sesión.

Explicación

Surgen varios problemas en el código proporcionado:

  1. Ruta de sesión: La ruta de sesión se define como /loginSession. Esto restringe la validez de las cookies de sesión a esta ruta específica. Para que la sesión funcione en diferentes rutas (como localhost:8100/home), debe establecer la ruta de la sesión en /.
  2. Errores de sintaxis: La condición session.Values["email "] == nulo es incorrecto. En su lugar, se debe utilizar la aserción de tipo para comprobar si el valor de la sesión es una cadena: if val, ok := session.Values["email"].(string); ok { // Compruebe si el valor es una cadena }.
  3. Manejo de errores: La operación de guardar sesión (sessionNew.Save(req, res)) no se verifica en busca de errores. Agregue manejo de errores para capturar y manejar cualquier problema potencial durante el guardado de la sesión.
  4. Manejo de sesión en SessionHandler: La sesión debe obtenerse y validarse antes de servir archivos estáticos en el Método SessionHandler. Además, la ruta del enrutador no debe configurarse dentro de esta función, ya que no está incluida aquí. En su lugar, configure la ruta del enrutador en main() y utilice una función separada que verifique si hay una sesión válida antes de manejar solicitudes de archivos estáticos.

Fragmentos de código relevantes (después de abordar los problemas):

// Set session options
store.Options = &sessions.Options{
    Domain:   "localhost",
    Path:     "/",
    MaxAge:   3600 * 8, // 8 hours
    HttpOnly: true,
}

// Session handling in `SessionHandler`
func SessionHandler(res http.ResponseWriter, req *http.Request) {
    session, err := store.Get(req, "loginSession")
    if err != nil {
        // Handle the error
    }

    // Check for a valid session
    if session.Values["email"] == nil {
        http.Redirect(res, req, "html/login.html", http.StatusFound)
    } else {
        http.Redirect(res, req, "html/home.html", http.StatusFound)
    }
}
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3