Установите дату начала и дату истечения срока для файлов cookie Rails

85

Как настроить запуск и / или истечение срока действия cookie Rails в определенную дату?

приблизительно синий
источник

Ответы:

201

Выдержки из документации Rails 5 :

Файлы cookie считываются и записываются через файлы cookie ActionController #.

Считываемые файлы cookie - это файлы, полученные вместе с запросом, записываемые файлы cookie будут отправлены вместе с ответом. Чтение файла cookie не возвращает сам объект cookie, а только его значение.

Примеры написания:

# Sets a simple session cookie.
# This cookie will be deleted when the user's browser is closed.
cookies[:user_name] = "david"

# Sets a cookie that expires in 1 hour.
cookies[:login] = { value: "XJ-122", expires: 1.hour }

# Sets a cookie that expires at a specific time.
cookies[:login] = { value: "XJ-122", expires: Time.utc(2020, 10, 15, 5) }

# Sets a "permanent" cookie (which expires in 20 years from now).
cookies.permanent[:login] = "XJ-122"

[...]

Символы опций для настройки файлов cookie:

  • :expires - Время истечения срока действия этого файла cookie в виде объекта Time или ActiveSupport :: Duration.

[...]

Сентил Кумар Бхаскаран
источник
23
Это все в документации: api.rubyonrails.org/classes/ActionDispatch/Cookies.html
Гильерме Гарнье,
8
@Senthil, если вы получаете что-то из другой статьи (в данном случае «как есть» из документации rails), дайте ссылку на источник.
sameera207
1
также: параметр expires должен быть экземпляром Time. cookies[:login] = { value: "JX-122", expires: 3.months }вызовет ошибку. но этого не будет. cookies[:login] = { value: "JX-122", expires: 3.months.from_now } подробности смотрите на github.com/rack/rack/issues/864#issuecomment-104706555
zhisme
18

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

один из комментариев указывает на устаревание SlideSessions :

"..Если вам нужно установить срок действия сеансов через все контроллеры в вашем приложении, просто добавьте следующую опцию в свой файл config / intializers / session_store.rb:

:expire_after => 60.minutes

Если вам нужно установить разное время истечения срока действия в разных контроллерах или действиях, используйте следующий код в действии или какой-нибудь before_filter:

request.session_options = request.session_options.dup
request.session_options[:expire_after]= 5.minutes
request.session_options.freeze

Дублирование хэша необходимо только потому, что он уже заморожен на этом этапе, даже если модификация по крайней мере: expire_after возможна и работает безупречно ... "

Надеюсь, это поможет. :)

пажер
источник
Можно ли это сделать и для хранилища сеансов ActiveRecord?
Lohith MV
4

Стоит отметить, что на данный момент невозможно установить время начала для файла cookie. Набор cookie всегда активен немедленно.

Eltiare
источник