복붙노트

[RUBY-ON-RAILS] 레일에 세션 시간 제한을 설정 3

RUBY-ON-RAILS

레일에 세션 시간 제한을 설정 3

이 간단한 것 : 나는 2 분 내 레일 타임 아웃 시간 액티브 레코드 세션을 얻기 위해 노력하고 있어요. 그래서 2 분 동안 내 사용자가 다시 로그인을 갖고 싶어.

난 그냥 내 로컬 dev에 컴퓨터에 레일 서버 (즉, WebBrick)를 실행하고 있습니다.

나는이 설정 / initalizers / session_store.rb에 다음 코드를 함께 할 수있는 뭔가 알고 있지만, 나는 확실히 그것을 못을 박았다 있다고 생각하지 않습니다

CodedOn::Application.config.session_store :active_record_store

CodedOn::Application.configure do
    config.action_controller.session = {:expire_after => 2.minutes}
end

이 작동하지 않는 것, 또는 적어도 내 세션 타임 아웃에 나타나지 않습니다. 나는 레일 2.x 또는 3.0에서 변경된 레일에 대해 많은에게 내가 일을 알고있는이 작업을 수행하는 3 방법을 찾을 수 없습니다

밖으로 어떤 하나의 도움이 날 수 있습니까?

해결법

  1. ==============================

    1.난 당신이 활성 기록 저장소가 expire_after 옵션을 구현하지 않기 때문에이 수동을해야 할 것이라 생각합니다. 내 그래서 당신 (I 가정) 필터 전에, 당신은이 작업을 수행해야합니다 :

    난 당신이 활성 기록 저장소가 expire_after 옵션을 구현하지 않기 때문에이 수동을해야 할 것이라 생각합니다. 내 그래서 당신 (I 가정) 필터 전에, 당신은이 작업을 수행해야합니다 :

    def authenticate
      if session[:logged_in]
        reset_session if session[:last_seen] < 2.minutes.ago
        session[:last_seen] = Time.now
      else
        ... authenticate
        session[:last_seen] = Time.now
      end
    end
    

    분명히, 이것은 완전하지 않다, 그러나 그것은 당신에게 기본 아이디어를 줄 것이다.

    최신 정보:

    이 기능은 버전 2.3 보낸 레일에 존재하는 것으로 보인다. 나는 여기에 관련 코드를 발견했다. 이것은 모든 파생 된 것들에 대한 기본 클래스 역할을한다 AbstractStore입니다. dadooda에서 알 수 있듯이 그래서, 다음과 같은 작업을해야합니다 :

    Some::Application.config.session_store :active_record_store, {
      expire_after: 24.hours,
    }
    
  2. ==============================

    2.나는 당신이 시도 할 수있는 간단한 방법으로 이런 짓을 :

    나는 당신이 시도 할 수있는 간단한 방법으로 이런 짓을 :

    귀하의 설정 / 초기화 / 단지 이렇게 session_store.rb :

    Yourapp::Application.config.session_store :cookie_store, 
                                                 :key => "_yourapp_session",
                                                 :expire_after => 2.minutes
    

    이 미세하게 나를 위해 노력하고, 희망은 당신을 위해 작동합니다.

  3. ==============================

    3.당신은 수동으로해야한다. 여기에 액티브 세션 클래스 메소드를 작성하는 예입니다. 당신은 정기적으로 전화를 루퍼스 - 스케줄러 및 / 또는 DelayedJob를 사용할 수 있습니다.

    당신은 수동으로해야한다. 여기에 액티브 세션 클래스 메소드를 작성하는 예입니다. 당신은 정기적으로 전화를 루퍼스 - 스케줄러 및 / 또는 DelayedJob를 사용할 수 있습니다.

    class Session < ActiveRecord::Base
      def self.sweep(time = 1.hour)
        if time.is_a?(String)
          time = time.split.inject { |count, unit| count.to_i.send(unit) }
        end
    
        delete_all "updated_at < '#{time.ago.to_s(:db)}' OR created_at < '#{2.days.ago.to_s(:db)}'"
      end
    end
    

    이 중요한 이유에 대한 자세한 배경 : http://guides.rubyonrails.org/security.html#session-expiry

  4. ==============================

    4.mosch는 말합니다 :

    mosch는 말합니다 :

    더 이상이 방법 보인다. : expire_after은 레일 3.2.11에서 나를 위해 일한 :

    Some::Application.config.session_store :active_record_store, {
      key: "some_session_id",
      domain: ".isp.com",
      expire_after: 24.hours,
    }
    

    응용 대한 모든 요청 후 쿠키 자동 연장합니다. 세션은 브라우저 종료를 통해 지속됩니다.

    나는 간단한 SSO 기능을위한 도메인에서 세션을 "세계화"에 위의 트릭은, 지금까지 작동하는 것 같다 않았다.

  5. ==============================

    5.만료 시간.

    만료 시간.

    MAX_SESSION_TIME = 60 * 60
    
    before_filter :prepare_session
    
    def prepare_session
    
       if !session[:expiry_time].nil? and session[:expiry_time] < Time.now
          # Session has expired. Clear the current session.
          reset_session
       end
    
       # Assign a new expiry time, whether the session has expired or not.
       session[:expiry_time] = MAX_SESSION_TIME.seconds.from_now
       return true
    end
    
  6. ==============================

    6.그냥 모델에서 timeout_in 방법을 추가하고 트릭을 수행해야합니다

    그냥 모델에서 timeout_in 방법을 추가하고 트릭을 수행해야합니다

      def timeout_in
        2.minutes
      end
    
  7. from https://stackoverflow.com/questions/5860950/setting-session-timeout-in-rails-3 by cc-by-sa and MIT license