«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему переменные сеансов Gorilla не сохраняются во всех запросах моего веб-приложения?

Почему переменные сеансов Gorilla не сохраняются во всех запросах моего веб-приложения?

Опубликовано 12 ноября 2024 г.
Просматривать:604

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

Переменные сеанса в сеансах Gorilla не сохраняются во время их использования

Проблема

При использовании веб-инструментария Gorilla Sessions переменные сеанса не сохраняются во всех запросах. Когда сервер запускается и пользователи посещают localhost:8100/, они перенаправляются на login.html, поскольку значения сеанса не существуют. При входе в систему переменные сеанса сохраняются, и пользователи перенаправляются на home.html. Однако при открытии новой вкладки и вводе localhost:8100/ пользователи направляются на Login.html вместо home.html, как ожидалось, несмотря на наличие переменных сеанса.

Объяснение

В этом случае возникает несколько проблем. предоставленный код:

  1. Путь сеанса: Путь сеанса определяется как /loginSession. Это ограничивает действие файлов cookie сеанса этим конкретным путем. Чтобы сеанс работал по разным путям (например, localhost:8100/home), вам следует установить путь сеанса как /.
  2. Синтаксические ошибки: Условие session.Values["email "] == ноль неверен. Вместо этого следует использовать утверждение типа, чтобы проверить, является ли значение сеанса строкой: if val, ok := session.Values["email"].(string); ok { // Проверяем, является ли значение строкой }.
  3. Обработка ошибок: Операция сохранения сеанса (sessionNew.Save(req, res)) не проверяется на наличие ошибок. Добавьте обработку ошибок, чтобы фиксировать и устранять любые потенциальные проблемы во время сохранения сеанса.
  4. Обработка сеанса в SessionHandler: Сеанс должен быть получен и проверен перед обслуживанием статических файлов в Метод SessionHandler. Кроме того, в этой функции не следует задавать путь к маршрутизатору, поскольку здесь он не ограничен. Вместо этого установите путь маршрутизатора в main() и используйте отдельную функцию, которая проверяет действительный сеанс перед обработкой запросов статических файлов.

Соответствующие фрагменты кода (после устранения проблем):

// 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)
    }
}
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3