горилле / сеансам не удается сохранить новый сеанс, когда MaxAge равен 0 - PullRequest
0 голосов
/ 15 октября 2019

Я использую гориллу / сессию в игрушечном приложении, и я хочу использовать FilesystemStore, но если для хранилища установить для параметра MaxAge значение 0, при попытке сохранить сеанс он удаляется, но еслисеанс новый, у него нет идентификатора:

    sess, err := s.store.Get(r, "session-name")
    if err != nil {
        log.Printf("error getting session %v", err)
        http.Error(w, "session", http.StatusInternalServerError)
        return
    }

    sess.Values["name"] = r.FormValue("name")
    if err = sess.Save(r, w); err != nil {
        log.Printf("error saving session %v", err)
        http.Error(w, "saving", http.StatusInternalServerError)
        return
    }

    http.Redirect(w, r, "/view", http.StatusFound)

И ошибка, которую я получаю:

2019/10/15 09:22:03 error saving session remove sessions\session_: The system cannot find the file specified.

Глядя на код Gorilla, кажется, что код Gorilla пытаетсяудалить сессию из хранилища, прежде чем определить, имеет ли сессия идентификатор.

У меня проблема с Gorilla или с тем, как я ее использую?

Все отлично работает, когда не настроеноMaxAge до 0, но тогда мне придется самому управлять файлами cookie.

1 Ответ

0 голосов
/ 15 октября 2019

Если вы отметите Save метод , вы увидите, что он пытается удалить сеансы с MaxAge <= 0. Вы фактически отмечаете сеансы, которые должны быть удалены таким образом. Поскольку вы создаете сеанс с s.store.Get(r, "session-name"), он будет использовать MaxAge из этого хранилища, и вам следует установить для него значение, большее, чем 0.

Документ для настройки MaxAge говорит:

Отдельные сеансы можно удалить, задав для этого сеанса Options.MaxAge = -1.

Но в разделе «Сохранить» вы можете увидеть:

Если параметр Options.MaxAgeсеанс равен <= 0, тогда файл сеанса будет удален из пути к хранилищу. </p>

Таким образом, установка его в 0 аналогична установке его -1 или любого другого отрицательного значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...