2009-10-22 17 views
5

Gần đây tôi đã triển khai bộ nhớ đệm trên trang web bằng cách sử dụng memcached trên ứng dụng Django của mình, tôi đã đặt TTL thành khoảng 500 giây và thực hiện mỗi lần xem trên các phần khác của ứng dụng web.Trang web rộng bộ nhớ đệm với Django - vấn đề với các trang được bảo vệ bằng mật khẩu khi đăng xuất

Vấn đề tôi gặp phải là khi người dùng đăng xuất, vì đó là biểu mẫu đăng trang web như mong đợi, tuy nhiên nếu họ truy cập vào phần mật khẩu được bảo vệ, ứng dụng sẽ hoạt động như thể họ vẫn đăng nhập trong, trừ khi họ nhấn "làm mới". Tôi mới sử dụng bộ nhớ đệm và tự hỏi mình có thể làm bất cứ điều gì thông minh để ngăn chặn điều này không?

Trả lời

7

Tôi gặp phải sự cố tương tự. Cách Django chuẩn là tắt bộ nhớ cache cho người dùng đã được xác thực.

#settings.py 
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True 

Nó hoạt động tốt nếu người dùng khác nhau xem các trang khác nhau (ví dụ: tên người dùng của họ trên chúng) và bạn không thể có một phiên bản cho chúng.

Nhưng nếu chỉ có 2 phiên bản của trang: đối với người dùng được xác thực và cho người khác thì sẽ không tốt nếu tắt hoàn toàn bộ nhớ cache cho người dùng đã được xác thực. Tôi đã viết một app rằng ngoài tất cả, bạn có thể tinh chỉnh bộ nhớ cache trong trường hợp này.

Cập nhật.

BTW: bạn đã đề cập rằng khi bạn nhấp vào 'làm mới' phiên bản chính xác của trang được nhận. Nó có nghĩa là vấn đề là cache phía máy khách (Expires header hoặc E-tag), không phải cache máy chủ.

Để ngăn chặn bộ đệm ẩn phía máy khách (bạn phải thực hiện điều đó nếu bạn có nhiều phiên bản của trang trong cùng một URL) sử dụng trang trí @cache_control(must_revalidate=True).

+0

Ngoài sự tò mò, ứng dụng của bạn có hoạt động không nếu tôi có 3 phiên bản thay vì hai phiên bản? (Anonymous, Authenticated, Staff)? – Powerlord

+0

Có. Nó có thể được sử dụng để có các phiên bản khác nhau của các trang dựa trên bất cứ điều gì theo yêu cầu. Điều này có nghĩa là bạn có thể lưu trữ các trang hoặc trang được lưu trong bộ nhớ cache của người dùng theo thuộc tính hoặc trang của người dùng được lưu trong bộ nhớ cache bởi cookie. –

+0

.. hoặc các trang được lưu trong bộ nhớ cache bởi các tham số GET –

1

Trong giao diện của mật khẩu được bảo vệ một phần của trang web, bạn có kiểm tra xem người dùng đã được đăng ký hay ẩn danh trước khi tìm nạp dữ liệu (và có thể đưa dữ liệu từ bộ nhớ cache)?

Bạn nên làm như vậy. Django giúp bạn, với một trang trí yêu cầu đăng nhập, bạn có thể đặt trên xem. Hãy xem điều này: http://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

+0

Có, tôi làm điều đó, mọi thứ đều có trang trí yêu cầu đăng nhập, vấn đề là trạng thái đăng nhập được lưu vào bộ nhớ cache. –

+0

Nhưng nó không rõ ràng nếu bạn nhấn "làm mới". –

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