Как динамически установить время истечения для сеанса на основе файлов cookie в Rails - PullRequest
12 голосов
/ 30 октября 2008

В настоящее время я использую хранилище сеансов на основе ActiveRecord для своего приложения Rails, и у меня есть фоновый процесс, который очищает неактивные сеансы каждые 30 минут.

Я бы хотел переключиться на новое хранилище сеансов на основе cookie в Rails, но как мне установить время истечения сеанса равным 30 минутам, в отличие от значения по умолчанию «в конце сеанса»?

Ответы [ 6 ]

14 голосов
/ 28 июля 2010

Я наткнулся на этот вопрос после разговора в офисе. Просто для полноты картины я обнаружил, что можно завершать сеансы после периода бездействия, и он встроен в Rails. В config / environment.rb сделайте что-то вроде:

config.action_controller.session = {
  :key          => 'whatever',
  :secret       => 'nottellingyou',
  :expire_after => 30.minutes
}

Проверьте lib / action_controller / session / cookie_store.rb # 114 для (явно недокументированной) опции в действии. Похоже, это было с момента перехода на сессию Rack в декабре 2008 года.

5 голосов
/ 30 октября 2008

В идеале вы хотите добавить что-то подобное в environment.rb:

session :session_expires => 1.day.from_now

Но это не сработает, потому что код запускается только один раз при запуске приложения и, следовательно, на следующий день все ваши сеансы создаются с истечением срока действия в прошлом.

Я обычно устанавливаю session_expires на некоторое время в будущем (6 месяцев). Затем вручную установите и проверьте session[:expires] дату в before_filter на моем контроллере приложений и сбросьте сеанс после того, как эта дата прошла.

Это позволяет ОЧЕНЬ легко добавить опцию «Держите меня в системе для ___» при входе в систему, просто установите session[:expires] = Time.now + ___

2 голосов
/ 27 января 2013

После долгих мучений и экспериментов, обнаруженных в 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
2 голосов
/ 30 октября 2008

Страница параметров сеанса на вики Rails намекает, что это возможно только через плагин:


Установить время истечения сеансового cookie

К сожалению, Rails не имеет возможности динамически устанавливать время истечения сеансового cookie. Поэтому рекомендуется использовать следующий плагин, который позволяет выполнить его: http://blog.codahale.com/2006/04/08/dynamic-session-expiration-times-with-rails/


Конечно, примите во внимание, что плагин старый и может не работать с вашей текущей версией Rails (я не смотрел на детали)

0 голосов
/ 30 октября 2008

Используйте это, у меня это работает в рельсах 2.1.x:

SlidingSessions

В настоящее время у меня установлены файлы cookie, срок действия которых истекает ровно через 2 недели после входа в систему, и просто установить 30 минут.

0 голосов
/ 30 октября 2008

Вы можете попробовать добавить следующую строку в файл 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.

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