2013-03-07 3 views
3

Итак, я задал этот вопрос по-другому here и не получил ответов, поэтому я попытаюсь перефразировать его, так как это, кажется, очень простая проблема ,сеансы на основе файлов cookie с рельсами: время сеанса смешивания с истечением срока действия

У меня есть приложение Rails с сеансами на основе файлов cookie. По умолчанию у них нет временных меток expires_at, поэтому область действия cookie сеанса - «сеанс». Это ваш сеанс ванили Rails.

Теперь я хочу создать функциональность «demo user», в которой я удаляю пользователя через 15 минут. Для достижения этой цели, я хочу, чтобы установить expires_at на куки сессии для Time.now + 15.minutes

 session[:expires_at] = Time.now + 15.minutes

Теперь это выше фрагмент кода делает выполнения, но это не имеет никакого влияния на объем печенья в. Область остается «сессией». Как изменить область действия на «сеанс» на дату-время?

Если настроить сеанс всего моего приложения в production.rb быть

 :expire_after => 24.hours

Тогда это будет работать ... но проблема в том, что я хочу, чтобы выборочно контролировать срок годности на куках сессии.

Edit: Оказывается, что причина, почему нет никакого влияния на объем печенья, когда я установил сессионный [: expires_at] потому, что последующие запросы затирания куки сессии и сброс его обратно в сессию. Все еще не уверен, что с этим делать.

ответ

0

Хотя не очень элегантный способ, но это работает для одного сеанса:

... 
request.env['rack.session.options'] = {expire_after: 15.minutes} 
session[:user_id] = 1 
... 
2

Возможно, вместо того, чтобы полагаться на маркеры истечения срока действия (см раздел 2.9 в "Ruby On Rails Security Guide" о том, почему это плохо), подобно this answer, магазин метка времени, когда сессия была создана на самой сессии (скажем session[:created_at]), а затем проверить на каждый запрос, если он должен быть истек эти «демо-пользователи»:

before_filter :check_session 

def check_session 
    # TODO: check session validity 
    if session[:demo_user] && session[:created_at] > 15.minutes.ago 
    reset_session 
    # TODO: redirect to login page 
    end 
end 
+0

Мне нравится это решение для того, что описывает ОП. Это, безусловно, будет делать то, что вы просите, избегайте истечения срока действия cookie и дает вам 100% контроль над истечением демонстрационных сессий. – awbergs

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