2008-12-11 42 views
8

Tôi đang tạo một ứng dụng web php lưu trữ thông tin cụ thể của người dùng mà không được chia sẻ với người dùng khác.

Bạn nên lưu trữ một số thông tin này trong biến $ _SESSION để lưu vào bộ nhớ cache? Ví dụ: cache danh sách các danh mục mà người dùng đã tạo cho tài khoản của họ.

Trả lời

10

Đây sẽ là sử dụng thích hợp của cơ chế phiên miễn là bạn ghi nhớ điều này:

  • phiên không tồn tại một số lượng không xác định thời hạn.
  • Khi kéo từ phiên, đảm bảo bạn thực sự có kết quả (ASP.NET sẽ trả về NULL nếu Phiên đã hết hạn/xóa)
  • Khởi động lại máy chủ có thể xóa bộ đệm phiên.
  • Làm điều này để thuận tiện, không phải hiệu suất. Đối với hiệu suất cao bộ nhớ đệm, chọn một cơ chế thích hợp (ví dụ memcached)

Một mô hình sử dụng tốt sẽ là như thế này (cookie ether hoặc phiên):

  • người dùng đăng nhập
  • sở thích Store (màu nền, 10 bản ghi cuối cùng được xem xét, loại) trong phiên/cookie.
  • Khi hiển thị trang, hãy tham khảo giá trị Phiên/Cookie (đảm bảo chúng là các giá trị hợp lệ và không phải là giá trị rỗng).

Những điều không nên làm trong một cookie

  • Không lưu trữ bất cứ điều gì nhạy cảm (phiên sử dụng).
  • Giá trị cookie không được cấp/từ chối bạn truy cập vào bất kỳ thứ gì (sử dụng phiên).
  • Lỗi bẫy, giả sử cờ và dây có thể không phải là những gì bạn mong đợi, có thể bị thiếu, có thể thay đổi khi chuyển tiếp.

Tôi chắc chắn cũng có những thứ khác để xem xét, nhưng đây chỉ là một phần của đầu tôi ở đây.

+0

Tôi đọc ở đâu đó mà memcached không đáng để thu hồi dữ liệu trên cao. Có nhanh hơn việc sử dụng phiên không? – menko

+0

memcached là nơi bạn đang lưu trữ bit và mẩu thông tin để bạn không phải tiếp tục nhấn một kho dữ liệu. Điều này dành cho các trang web lưu lượng truy cập rất cao và một trong những điều bạn bắt đầu triển khai sau khi bạn đã mở rộng ứng dụng và máy chủ db của mình. –

+0

memcached nhanh hơn nhiều so với cơ sở dữ liệu, nhưng vẫn chậm hơn truy cập $ _SESSION dựa trên tệp vì bạn phải thực hiện các yêu cầu mạng thay vì truy cập vào đĩa cục bộ. Lý do để sử dụng nó thay vì là sự nhất quán trên nhiều máy chủ. –

4

Điều đó có thể làm việc tốt cho một lượng tương đối nhỏ dữ liệu nhưng bạn sẽ phải mất một thứ vào xem xét:

  1. $ _SESSION được lưu trữ ở đâu đó giữa các yêu cầu, tập tin trên đĩa hoặc cơ sở dữ liệu hay cái gì khác tùy thuộc vào những gì bạn chọn để sử dụng (mặc định là tệp)
  2. $ _SESSION là cục bộ cho một người dùng trên một máy.
  3. phiên có TTL (thời gian hoạt động), chúng biến mất sau một khoảng thời gian (bạn kiểm soát)
  4. Trong một số trường hợp, phiên có thể chặn (hiếm khi xảy ra sự cố, nhưng tôi đã chạy nó) Nếu dữ liệu bạn muốn lưu vào bộ nhớ cache sẽ được truy cập bởi nhiều người dùng, bạn sẽ nhanh chóng tắt bộ nhớ cache một cách riêng biệt.
2

Nếu bạn chỉ muốn dữ liệu này có sẵn trong phiên của họ, thì có. Nếu bạn muốn nó có sẵn vào ngày mai, hoặc 4 giờ kể từ bây giờ, bạn cần lưu nó vào cơ sở dữ liệu.Về mặt kỹ thuật, bạn có thể sửa đổi các phiên để có tuổi thọ rất dài nhưng nhận ra nếu họ sử dụng máy tính khác, trình duyệt khác hoặc xóa cookie, họ sẽ mất liên kết đến phiên của họ. của tài khoản người dùng trong ứng dụng của bạn, liên kết phiên với tài khoản của họ và lưu dữ liệu ở vị trí thấm.

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