Как мне динамически установить время истечения срока для сеанса на основе cookie в Rails
В настоящее время я использую хранилище сеансов ActiveRecord для моего приложения Rails, и у меня есть фоновый процесс, который очищает неактивные сеансы каждые 30 минут.
Я хотел бы переключиться на новое хранилище сеансов на основе файлов cookie Rails, но как установить время истечения срока действия сеанса на 30 минут, в отличие от значения по умолчанию "по окончании сеанса"?
Ответы
Ответ 1
Я наткнулся на этот вопрос после разговора в офисе. Просто для полноты, я обнаружил, что можно истечь сессий после периода бездействия, и он встроен в Rails. В config/environment.rb сделайте что-то в строках:
config.action_controller.session = {
:key => 'whatever',
:secret => 'nottellingyou',
:expire_after => 30.minutes
}
Откажитесь от lib/action_controller/session/cookie_store.rb # 114 для действия (видимо, недокументированного) в действии. Похоже, что это было вокруг с момента перехода на сеансы стойки в декабре 2008 года.
Ответ 2
В идеале вы хотите добавить что-то вроде этого в environment.rb:
session :session_expires => 1.day.from_now
Но это не сработает, потому что код запускается только один раз при запуске APP и, таким образом, на следующий день все ваши сеансы создаются с истечением в прошлом.
Я обычно устанавливаю session_expires
на некоторое время в будущем (6 месяцев). Затем вручную установите и проверьте дату session[:expires]
в before_filter
на моем контроллере приложений и reset сеанс, когда эта дата прошла.
Это делает ОЧЕНЬ легким добавить параметр "Запомнить меня для ___" при входе в систему, вы просто установите session[:expires] = Time.now + ___
Ответ 3
Страница параметры сеанса в вики Rails подсказывает, что это возможно только через плагин:
Установите время истечения срока действия cookie сеанса
К сожалению, Rails не имеет возможности динамически устанавливать время истечения срока действия cookie сеанса. Поэтому рекомендуется использовать следующий плагин, который позволяет выполнить его: http://blog.codahale.com/2006/04/08/dynamic-session-expiration-times-with-rails/
Конечно, учтите, что плагин устарел и может не работать с вашей текущей версией Rails (я не смотрел специфику)
Ответ 4
После большой боли и экспериментов, найденных в Rails 3.x, вам нужно установить свои пользовательские параметры сеанса в фильтр после каждого запроса.
class ApplicationController < ActionController::Base
after_filter :short_session
...
def short_session
request.session_options = request.session_options.dup
request.session_options[:expire_after] = 1.minute
request.session_options.freeze
end
Ответ 5
Используйте это, он работает для меня в rails 2.1.x:
SlidingSessions
В настоящее время у меня есть файлы cookie, срок действия которых истекает ровно через 2 недели после входа пользователя в систему, и установка его на 30 минут проста.
Ответ 6
Вы можете попробовать добавить следующую строку в файл environment.rb:
session :session_key => 'my_session_key'
session :session_expires => 1.day.from_now
В качестве альтернативы вы можете установить параметры сеанса следующим образом:
ActionController::Base.session_options[:session_expires] = 1.day.from_now
Я не тестировал это, поэтому YMMV.