Đặt ngày bắt đầu và ngày hết hạn cho cookie Rails


83

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:


200

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.

[...]



8
@Senthil, Nếu bạn nhận được nội dung nào đó từ một bài báo khác (trong trường hợp này là 'nguyên trạng' từ tài liệu rails), Vui lòng cung cấp tham chiếu đến nguồn gốc.
sameera207,

1
also: expires tùy chọn phải là một phiên bản Thời gian. 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
zhisme

18

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. :)


Điều này có thể được thực hiện cho cả cửa hàng phiên ActiveRecord không?
Lohith MV

4

Cần lưu ý rằng hiện tại không thể đặt thời gian bắt đầu cho cookie. Một tập hợp cookie luôn hoạt động ngay lập tức.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.