2011-09-07 47 views
5

Tôi nghĩ rằng chúng được lưu trữ trong cookie - nhưng không, việc kiểm tra cookie không mang lại gì cho tôi. Phiên cũng không lưu trữ chúng. Vì vậy, nơi tôi có thể tìm thấy chúng?Các tin nhắn flash được lưu ở đâu?

Tôi cần điều này để đặt trực tiếp (không thông qua flash băm).

+1

Bạn cần đặt chúng nhưng không cần sử dụng đèn flash var. Điều này thậm chí có ý nghĩa? Chỉ cần hỏi để hiểu những gì bạn muốn đạt được. – pduersteler

+0

Nếu chúng được lưu trữ trong cookie, tôi sẽ đặt chúng trực tiếp: 'cookies [: flash] [: notice] =" Hello World! ". Nhưng chúng được lưu trữ ở một nơi khác. Vì vậy, câu hỏi đặt ra là: nơi chúng được lưu trữ :) – fl00r

+0

Từ railsguides: Đèn flash là 'phần đặc biệt của phiên' được xóa với mỗi yêu cầu. và cũng Tất cả các cửa hàng phiên sử dụng cookie để lưu trữ ID duy nhất cho mỗi phiên (bạn phải sử dụng cookie, Rails sẽ không cho phép bạn chuyển ID phiên trong URL vì điều này kém an toàn hơn). Tôi nghĩ rằng nếu chúng tôi đang sử dụng cookieStore để lưu trữ dữ liệu phiên chỉ sau đó flash sẽ được lưu trữ trong cookie. Nói chung, chúng tôi chỉ sử dụng cookieStore, vì vậy tôi nghĩ rằng thông báo flash phải ở đâu đó trong cookie [: session]. Tôi cũng là người mới trong đường ray. đúng nếu tôi đã sai lầm. – rtcoms

Trả lời

7

Chúng được lưu trữ in your session store. Giá trị mặc định vì đường ray 2.0 là kho lưu trữ cookie nhưng hãy kiểm tra trong config/initializers/session_store.rb để kiểm tra xem bạn có đang sử dụng thứ gì đó không phải là mặc định hay không.

2

Theo APIdock : ActionController/Flash, nó được lưu trữ trong một phiên.

Lưu ý rằng nếu phiên bị tắt chỉ flash.now sẽ hoạt động.

Khi sử dụng flash.now, giá trị của bạn không có sẵn trong yêu cầu tiếp theo.

+0

Tôi tin rằng bạn muốn liên kết tới http://apidock.com/rails/ActionDispatch/Request/flash, 'ActionController :: Flash' chỉ tồn tại trong đường ray 1.0. –

+0

Rất tiếc, đúng là bạn đang – pduersteler

+0

bạn có thể chỉnh sửa câu trả lời rồi ;-) –

0

Tôi đang tìm câu trả lời chi tiết hơn và tôi đã tìm ra câu trả lời thông qua điều tra. Các điều sau áp dụng nếu dự án của bạn đang lưu trữ phiên của nó trong cơ sở dữ liệu Postgres.

LƯU Ý: Ứng dụng của bạn có thể có kết nối đến nhiều hơn một DB. Tôi vẫn chưa tìm ra cách Rails xác định kết nối nào để sử dụng. Dự án của tôi session_store.rb trống.

Bạn sẽ tìm thấy thông báo flash trong bảng sessions. Có một cột có tên là data có chứa chuỗi được mã hóa base64.

Nếu bạn giải mã chuỗi, bạn sẽ tìm thấy một blob nhị phân không chỉ chứa các thông báo flash (ở dạng marshalled, vì vậy chúng có thể đại diện cho bất kỳ loại đối tượng Ruby nào), mà còn là mã thông báo CSRF. .

Toàn bộ blob thực sự là một bảng băm được marshalled. Nó có thể được unmarshalled trong Ruby với Marshal.load, và sau khi bất kỳ thay đổi được thực hiện, nó có thể được remarshalled với Marshal.dump.

Các vấn đề liên quan