Установить время окончания Rack cookie - PullRequest
13 голосов
/ 16 июня 2010

Я использую Rack, чтобы попытаться реализовать функцию «Запомнить меня» в моем приложении Sinatra.

Я могу установить истечение срока действия куки-файла сеанса по окончании сеанса или через X секунд, но я бы хотел сделать оба.

Например, если пользователь нажал «запомнить меня», я бы хотел, чтобы его сеанс завершился через X секунд. Например, мой app.rb имеет строку, которая выглядит следующим образом:

use Rack::Session::Cookie, :expire_after => 2592000, #30 days in seconds
                           :secret => MY_SECRET

Я пытался сделать следующее при входе пользователя в систему:

if (!remember_me)
  env['rack.session.options'][:expire_after] = nil
end

Однако это не устанавливает значение cookie.

Как установить это?

Ответы [ 3 ]

4 голосов
/ 23 июня 2012

Я пытался сделать то же самое, и я понял, в чем проблема для меня.Сеансовый cookie устанавливается на каждый запрос, если у вас установлено время expire_after.Поэтому, когда вы говорите if (! Запомнить_me), для этого запроса время истечения cookie устанавливается равным нулю.Однако при следующем запросе cookie сеанса повторно инициализируется со временем истечения 2592000. Кажется, исправление состоит в том, чтобы не устанавливать время expire_after по умолчанию и вместо этого сказать:

# don't set default expire time
use Rack::Session::Cookie, :secret => MY_SECRET


if(remember_me) 
  env['rack.session.options'][:expire_after] = 2592000 
end

Я, к сожалению, не понялузнать, как установить время expire_after по умолчанию и программно увеличить его время.

0 голосов
/ 20 мая 2013

Ответ Криса на самом деле не работал для меня.Я обнаружил, что должен убедиться, что я включил исходные параметры сеанса с новым значением expire_after, поэтому вместо:

env['rack.session.options'][:expire_after] = 2592000

я бы использовал:

env['rack.session.options'].merge! expire_after: 2592000

и обязательно поместите оператор use Rack::Session::Cookie (без настройки expire_after) в свой блок configure, если вы используете Sinatra.

Это помогло.

0 голосов
/ 16 июня 2010

Это, вероятно, должно быть сделано до загрузки сеанса.

См. Rack :: Session :: Cookie # load_session и Rack :: Session :: Cookie # commit_session

...