Làm cách nào để đặt cookie Rails bắt đầu và / hoặc hết hạn vào một ngày nhất định?
Câu trả lời:
Trích dẫn từ tài liệu Rails 5 :
Cookie được đọc và ghi thông qua ActionController # cookie.
Các cookie đang được đọc là những cookie nhận được cùng với yêu cầu, các cookie được viết sẽ được gửi đi cùng với phản hồi. Việc đọc cookie không lấy lại chính đối tượng cookie mà chỉ lấy lại giá trị mà nó giữ.
Ví dụ về cách viết:
# 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"
[...]
Các ký hiệu tùy chọn để đặt cookie là:
:expires
- Thời gian mà cookie này hết hạn, dưới dạng đối tượng Time hoặc ActiveSupport :: Duration.[...]
cookies[:login] = { value: "JX-122", expires: 3.months }
sẽ phát sinh lỗi. nhưng điều này sẽ không. cookies[:login] = { value: "JX-122", expires: 3.months.from_now }
xem chi tiết github.com/rack/rack/issues/864#issuecomment-104706555
câu hỏi của bạn có thể liên quan đến câu hỏi này: Làm cách nào để đặt động thời gian hết hạn cho một phiên dựa trên cookie trong Rails
một trong những nhận xét trỏ tới Phiên không dùng nữa :
"..Nếu bạn cần đặt khoảng thời gian hết hạn cho các phiên thông qua tất cả các bộ điều khiển trong ứng dụng của mình, chỉ cần thêm tùy chọn sau vào tệp config / intializers / session_store.rb của bạn:
:expire_after => 60.minutes
Nếu bạn cần đặt thời gian hết hạn khác nhau trong các bộ điều khiển hoặc hành động khác nhau, hãy sử dụng mã sau trong hành động hoặc một số before_filter:
request.session_options = request.session_options.dup request.session_options[:expire_after]= 5.minutes request.session_options.freeze
Chỉ cần sao chép hàm băm vì nó đã bị đóng băng tại thời điểm đó, mặc dù có thể sửa đổi ít nhất: expire_ after và hoạt động hoàn hảo ... "
Tôi hy vọng rằng sẽ giúp. :)