Legen Sie das Start- und Ablaufdatum für Rails-Cookies fest

83

Wie setze ich ein Rails-Cookie so, dass es zu einem bestimmten Datum startet und / oder abläuft?

ungefähr
quelle

Antworten:

199

Auszüge aus der Rails 5-Dokumentation :

Cookies werden über ActionController # Cookies gelesen und geschrieben.

Die gelesenen Cookies sind diejenigen, die zusammen mit der Anfrage empfangen wurden. Die geschriebenen Cookies werden mit der Antwort gesendet. Durch das Lesen eines Cookies wird das Cookie-Objekt selbst nicht zurückerhalten, sondern nur der Wert, den es enthält.

Beispiele für das Schreiben:

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

[...]

Die Optionssymbole zum Setzen von Cookies sind:

  • :expires - Der Zeitpunkt, zu dem dieses Cookie als Time- oder ActiveSupport :: Duration-Objekt abläuft.

[...]

Senthil Kumar Bhaskaran
quelle
23
Dies ist alles in den Dokumenten: api.rubyonrails.org/classes/ActionDispatch/Cookies.html
Guilherme Garnier
8
@Senthil, Wenn Sie etwas aus einem anderen Artikel erhalten (in diesem Fall "wie es ist" aus Rails-Dokumenten), geben Sie bitte einen Verweis auf den Ursprung an.
sameera207
1
außerdem: Die Option expires sollte eine Zeitinstanz sein. cookies[:login] = { value: "JX-122", expires: 3.months }würde Fehler auslösen. aber das wird nicht. cookies[:login] = { value: "JX-122", expires: 3.months.from_now } Siehe für Details github.com/rack/rack/issues/864#issuecomment-104706555
zhisme
18

Ihre Frage könnte mit dieser Frage zusammenhängen: Wie stelle ich die Ablaufzeit für eine Cookie-basierte Sitzung in Rails dynamisch ein?

Einer der Kommentare verweist auf " Verwerfen von SlideSessions" :

"..Wenn Sie die Ablaufdauer für Sitzungen über alle Controller in Ihrer Anwendung festlegen müssen, fügen Sie einfach die folgende Option zu Ihrer Datei config / intializers / session_store.rb hinzu:

:expire_after => 60.minutes

Wenn Sie in verschiedenen Controllern oder Aktionen unterschiedliche Ablaufzeiten festlegen müssen, verwenden Sie den folgenden Code in Aktion oder einen before_filter:

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

Das Duplizieren des Hashs ist nur erforderlich, weil er zu diesem Zeitpunkt bereits eingefroren ist, obwohl eine Änderung von mindestens: expire_after möglich ist und einwandfrei funktioniert ... "

Ich hoffe das hilft. :) :)

Pageman
quelle
Kann dies auch für den ActiveRecord-Sitzungsspeicher durchgeführt werden?
Lohith MV
4

Es ist erwähnenswert, dass es derzeit unmöglich ist, eine Startzeit für einen Cookie festzulegen. Ein Cookie-Set ist immer sofort aktiv.

eltiare
quelle