2014-02-16 2 views
4

Я пытаюсь создать простое веб-приложение с именем пользователя.Golang Gorilla/session

Здесь я нашел эту функцию в другом сообщении.

func initSession(r *http.Request) *sessions.Session { 
    session, _ := store.Get(r, "mBoxStore") 
    if session.IsNew { 
     session.Options.Domain = "localhost" 
     session.Options.MaxAge = 10 
     session.Options.HttpOnly = false 
     session.Options.Secure = false 
     log.Println("Create New Session (cookie)") 
    } else { 
     log.Println("Use Old Session (old cookie)") 
    } 
    return session 
} 

Печенье истекает после того, как 10 seconds, но когда я перезагрузить страницу после того, как, например, 1 Minute используется старый (истек) куки-файл.

В моем браузере (Firefox) я вижу cookie с правом истечения срока.

Я думаю, что он должен создать новую сессию с новым файлом cookie, или это неправильно?

любые подсказки?

+1

Вам лучше настроить свои параметры в магазине при запуске приложения. Затем просто используйте 'session.Get' в своих обработчиках (и проверьте наличие ошибок). Документы 'сессий' хорошо его покрывают: http://www.gorillatoolkit.org/pkg/sessions – elithrar

+0

Спасибо за ваш ответ. Проблема не в коде ... он работает для меня ... я могу сохранять и читать данные из сеанса ... Но он игнорирует дату истечения срока действия из файла cookie. он всегда использует «старое» Cookie. – user3033143

ответ

4

Причина, по которой вы видите Use Old Session (old cookie), состоит в том, что параметры сеанса только устанавливаются при создании файла cookie. Каждый раз, когда вы получаете доступ к файлу cookie до, он истекает (isNew == false) Options не устанавливаются, а значения по умолчанию переопределяют те, которые вы установили при создании сеанса. По умолчанию MaxAge - 86400 * 30 (один месяц).

Вы можете убедиться в этом:

  1. Удаление всех куки для сайта (т.е. локальной)
  2. Воспитывая маршрут в вашем браузере
  3. Проверки срока годности на недавно созданное печенье - вы Теперь увидим, что сейчас + 10 секунд
  4. Подождите, что 10 секунд.
  5. Обновить страницу - ваш журнал должен подтвердить, что это новый файл cookie.
  6. Теперь обновите страницу до истечения срока действия файла cookie (т. Е. В течение 10 секунд)
  7. Вы увидите, что срок действия истечения истекает теперь + 1 месяц (по умолчанию).

Именно поэтому я предлагаю установить параметры сеанса один раз, при запуске приложения. Отклоняйтесь только в том случае, если вы устанавливаете более короткие времена жизни файлов cookie для целей проверки подлинности, и в этих случаях используют другое имя сеанса (т. Е. _csrf_token с истечением 4 часов).

Фрагмент кода, который вы используете, на самом деле не идеален, поскольку он полностью игнорирует любые ошибки, возникающие при попытке получить сеанс. Вы можете столкнуться с ошибками, если ваш основной магазин сеансов сломан, и/или у пользователя отключены файлы cookie.

+0

Спасибо за помощь :) Теперь я вижу проблему. Я не видел истечения «месяца» в новом cookie, я только смотрю на время создания. – user3033143

+2

В случае, если это было непонятно (сначала мне было непонятно, когда ответ сказал * Я предлагаю установить параметры сеанса один раз, при запуске приложения *), в магазине есть '.Options', как и' session .Options'. Поэтому: 'var sessionStore = sessions.NewCookieStore (...)', а затем 'sessionStore.Options = & session.Options {MaxAge: ...}' и так далее – eduncan911