2011-10-12 36 views
13

Tôi đang học Rails bằng cách đọc hướng dẫn trực tuyến (dành cho Rails v2.3). Hướng dẫn tuyệt vời, tuy nhiên, có một sự nhầm lẫn với tôi, đó là:Rails v2.3: Sự khác biệt giữa phiên và cookie

có một chương giải thích Session của Rails và một chương khác giải thích Cookies của Rails. Lời giải thích rất dễ hiểu, nhưng khi so sánh hai, người đọc như tôi không thấy sự khác biệt đáng kể giữa Session và Cookies. Đặc biệt là , trong đó phiên tình huống nào nên được sử dụng và theo tình huống nào nên sử dụng Cookies?

Ngoài ra, trong chương phiên, có một khái niệm về CookieStore, sự khác biệt giữa CookieStore và Cookie là gì?

Ai đó có thể giải thích cho tôi những điều này?

Trả lời

22

Phiên & Cookie cả hai đều giữ khả năng lưu trữ một số thông tin (ví dụ: id current_user) ở giữa hai hoặc nhiều yêu cầu (trong http) không có trạng thái không quốc tịch.

Nhưng phiên là khái niệm trừu tượng liên quan đến khái niệm ở trạng thái nhất định trong một khoảng thời gian cụ thể: thông tin chứa trong cơ sở dữ liệu, trong tệp phía máy chủ. HOẶC trong cookie.

Cookie luôn là các trình điều hướng tệp văn bản nhỏ phải lưu trữ một số dữ liệu liên tục giữa các yêu cầu ... Nhưng có một số dữ liệu ở phía máy khách có thể không an toàn nên đó là lý do tại sao nó thường được mã hóa. Nhưng đúng là khái niệm có thể trùng lặp với phiên.

TL; DR: phiên khái niệm trừu tượng về giữ dữ liệu tạm thời. Cookie một (phổ biến) cách để làm điều đó.

6

Đối với tôi, điểm khác biệt chính là dữ liệu phiên được lưu trữ trên máy chủ, trong khi các cookie được lưu trữ trên máy khách (trình duyệt).

Vì vậy, bạn có thể tin tưởng dữ liệu từ phiên. Thông tin từ cookie có thể bị thao túng, bị đánh cắp, và do đó không nên dựa vào để sử dụng quan trọng (để truy cập đúng chẳng hạn).

Điểm thứ hai, là cookie có kích thước giới hạn và chỉ dựa trên văn bản. Bạn có thể lưu trữ trong phiên nhiều đối tượng phức tạp (nhưng hãy cẩn thận của bộ nhớ consumpation), và bạn không cần phải chuyển chúng cho khách hàng sau đó trở lại tại mỗi yêu cầu.

+1

Các phiên dựa trên cookie này đã tồn tại ở phía máy khách và dữ liệu của chúng được mã hóa. – secretlm

7

Cookie là một tệp văn bản nhỏ được lưu trữ trong trình duyệt.

Phiên là khái niệm trạng thái "đang được sử dụng" và trạng thái đó có thể có dữ liệu được liên kết với nó. Đường ray theo dõi các phiên có cookie và cho phép bạn chọn dung lượng lưu trữ khác nhau cho dữ liệu được liên kết và truy cập vào cùng với giao diện session.

CookieStore có nghĩa là tất cả thông tin phiên được lưu trữ bên trong chính cookie đó. Bạn có thể chọn sử dụng nhiều cửa hàng khác khi thích hợp và sẽ vẫn có sẵn với các phương thức truy cập session của bạn.

Ngoài phiên, bạn có thể đặt các cookie khác để lưu trữ thông tin trên trình duyệt của người dùng. Đây không phải là gắn liền với phiên và có thể được thiết lập, truy cập và xóa một cách độc lập.

Ví dụ 1, tàng trữ giỏ mua hàng của người dùng đăng nhập trong một phiên:

session[:embarassing_products] = ['ooh', 
            'naughty', 
            'lucky_im_using_activerecord_store', 
            'only_the_session_id_is_in_the_cookie', 
            'other_data_arent_in_the_browser'] 

Các giỏ mua hàng được bảo tồn cho phiên làm việc của người dùng. Bạn có thể đặt phiên kết thúc khi cửa sổ trình duyệt bị đóng, khi người dùng đăng xuất hoặc khi một khoảng thời gian nhất định trôi qua.

Ví dụ 2, nhớ tuỳ chọn ngôn ngữ cuối cùng của trình duyệt cho miền của bạn trong một cookie:

cookie[:lang] = 'en-US' 

Thông tin này được lưu trữ bên trong các tập tin cookie riêng của mình. Trừ khi cookie hết hạn hoặc bị xóa (bởi bạn hoặc người dùng), nó sẽ nằm trong trình duyệt.

3

Và thông thường, phiên chỉ tồn tại cho đến khi người dùng tắt trình duyệt của họ. Đó là hữu ích cho đăng nhập điển hình. Trong khi nếu bạn cần thông tin để duy trì giữa các phiên, bạn có thể sử dụng cookie có thời lượng dài hơn, ví dụ: cờ 'nhớ tôi' vẫn tồn tại ngay cả sau khi trình duyệt được khởi động lại.

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