2013-02-15 3 views
0

Я спросил подобный вопрос hereСеансы в рельсах - динамические

Теперь я с последней проблемой. я использую:

config.action_controller.session_store = :cookie_store 

с

ActionController::Base.session = { 
    #:domain  => :all, 
    :key   => 'xxxxxxxx', 
    :secret  => 'xxxxxxxxxxx...', 
    :expire_after => 5.minutes 
     } 

Это прекрасно работает, и это действительно устанавливает печенье в течение 5 минут бездействия. То, что я пытаюсь сейчас сделать, это когда пользователь перед входом в щелчках помни меня, я хочу, чтобы придать ему более длительный тайм-аута:

Это действие Логина, который я использую:

session_user = User.authenticate(params[:user][:email], params[:user][:password]) 
    if session_user 

     session[:user] = session_user.id 
     @user=User.find(session[:user]) 
     @user.update_attributes(:last_login_time => Time.now(),:is_logged => true) 
     @user.save 
     flash[:message] = "Login successful." 
     redirect_to "/admin" 
     #cookies[:userd] = {:value => session_user, :expires => Time.now + 12} 
     if params[:remember_me] 

     #base.request.session_options = request.session_options.dup 
     #base.request.session_options[:expire_after]= 10000.minutes 
     #base.request.session_options.freeze 
     #session[:expire_after] = 96000.seconds.from_now 
     #ActionController::Base.session_options[:expire_after] = 1.years 
     #session[:expires] = Time.now + 1 
     session[:expires_at] = 5.days 
     end 
    else 
     flash[:warning] = "Your email or password is incorrect. Please re-enter." 
    end 
    end 

Как вы можете видеть в IF (выполняется, когда пользователь щелкнул, помните меня), я пробовал много разных подходов, но никто из них не работает, кроме ActionController :: Base.session_options [: expire_after] = 1.years, но это, как кажется постоянно переопределяет переменную [expire_after].

Что мне нужно сделать?

ответ

-1

Не переопределяет ActionController :: Базовая настройка, что вы хотите? Если вы установите его на один год, то, что вы говорите, является «постоянным»? Удалите все, кроме 5-й прокомментированной строки в блоке If, и проверьте что-то, хранящееся в сеансе, для следующего входа. Если он длится более 5 минут, вы ответили на свой вопрос.

Для устранения неполадок удалите файлы cookie из браузера или поместив reset_session в ваше действие для входа (которое оставит cookie на месте, но с пустыми данными), а затем удалите эту строку для следующего входа.

ActionController::Base.session_options[:expire_after] = 1.years 

должно работать.

+0

переопределение ActionController :: Base устанавливает значение, которое влияет на все глобальное. Мне это не нужно. Мне просто нужно, если вы не запомните меня, тогда у cookie будет 5 минут (как это уже есть), если вы нажмете на кнопку «запомнить меня», а затем, вероятно, на 3 недели или около того. Я просто не могу сделать это, независимо от того, какой код я использую (все комбинации, которые я пытался в комментариях) ... Также код запускается независимо от redirect_to. –

+0

@Wexoni - привет спасибо за исправление на 'redirect_to' - я рассматривал его как проблему из-за коленной реакции от моей работы ASP.NET (перенаправления ASP.NET являются немедленными и действуют как« возврат »метода) , – mcfazz

Смежные вопросы