Ustaw datę rozpoczęcia i datę wygaśnięcia plików cookie Rails

85

Jak ustawić plik cookie Railsów, aby zaczynał się i / lub tracił ważność w określonym dniu?

przybliżony niebieski
źródło

Odpowiedzi:

201

Fragmenty dokumentacji Rails 5 :

Pliki cookie są odczytywane i zapisywane przez ActionController # cookies.

Odczytywane pliki cookie to te otrzymane wraz z żądaniem, zapisane pliki cookie zostaną wysłane wraz z odpowiedzią. Odczytanie pliku cookie nie powoduje odzyskania samego obiektu cookie, a jedynie jego wartość.

Przykłady pisania:

# 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"

[…]

Symbole opcji ustawienia plików cookie to:

  • :expires - Czas, w którym wygasa ten plik cookie, jako obiekt Time lub ActiveSupport :: Duration.

[…]

Senthil Kumar Bhaskaran
źródło
23
To wszystko jest w dokumentacji: api.rubyonrails.org/classes/ActionDispatch/Cookies.html
Guilherme Garnier
8
@Senthil, Jeśli otrzymujesz coś z innego artykułu (w tym przypadku „tak jak jest” z dokumentów rails), podaj odniesienie do pochodzenia.
sameera207
1
także: opcja expires powinna być instancją Time. cookies[:login] = { value: "JX-122", expires: 3.months }spowodowałoby błąd. ale to nie będzie. cookies[:login] = { value: "JX-122", expires: 3.months.from_now } zobacz szczegóły github.com/rack/rack/issues/864#issuecomment-104706555
zhisme
18

Twoje pytanie może być związane z tym pytaniem: Jak dynamicznie ustawić czas wygaśnięcia sesji opartej na plikach cookie w Railsach

jeden z komentarzy wskazuje na wycofywanie sesji slajdów :

"..Jeśli chcesz ustawić okres ważności sesji dla wszystkich kontrolerów w aplikacji, po prostu dodaj następującą opcję do pliku config / intializers / session_store.rb:

:expire_after => 60.minutes

Jeśli chcesz ustawić inny czas wygaśnięcia w różnych kontrolerach lub akcjach, użyj następującego kodu w akcji lub jakiegoś before_filter:

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

Duplikacja hasha jest potrzebna tylko dlatego, że jest już zamrożona w tym momencie, mimo że modyfikacja co najmniej: expire_after jest możliwa i działa bez zarzutu ... "

Mam nadzieję że to pomogło. :)

pageman
źródło
Czy można to zrobić również dla magazynu sesji ActiveRecord?
Lohith MV
4

Warto zauważyć, że w tej chwili nie można ustawić czasu rozpoczęcia dla pliku cookie. Zestaw plików cookie jest zawsze aktywny natychmiast.

eltiare
źródło