2012-02-02 27 views
7

Có cách nào để xóa khóa bộ nhớ phiên cho tất cả người dùng không?Có cách nào để xóa khóa bộ nhớ phiên cho tất cả người dùng không?

Ví dụ: tôi đang lưu trữ các mặt hàng cửa hàng hiện đang được người dùng chọn trong khóa phiên hiện tại "currentItem". Trong khu vực quản lý của trang web, tôi quyết định xóa mục cửa hàng cụ thể đó. Bây giờ tôi muốn vô hiệu hóa tất cả các mục nhập bộ nhớ cache "currentItem" trên tất cả các phiên.

Có cách nào để thực hiện việc này không?

Tôi nhận ra ví dụ mà tôi đã đưa ra là một chút ít giả tạo, nhưng nó được điểm qua. Tôi nghi ngờ một giải pháp sẽ là sử dụng api Cache bình thường để lưu trữ tất cả các mục hiện tại của người dùng. Bằng cách đó tôi có thể vô hiệu hóa chúng khi cần thiết.

nhờ

Trả lời

3

Bạn không thể có được tất cả các phiên hiện tại từ tất cả người dùng
(Thẳng thắn mà nói, you can, nhưng tôi không đề nghị này, và bạn vẫn có thể chỉ đọc InProc sessions theo cách này).

Vì vậy, điều duy nhất bạn có thể làm là một cái gì đó như thế này:

  • Store trong Session chỉ ID của giỏ hàng dùng
  • Thêm mục tương ứng với ID để Cache
  • Sau đó, khi thêm mục vào số Cache, đặt dependency to the Item
  • Sau đó, chỉ tạo sự kiện để thay đổi toàn bộ giỏ hàng trong Cache.
  • Ngoài ra, bạn nên suy nghĩ về việc tạo lại các mục nếu vì một số lý do Cache đang được làm trống - bạn nên cung cấp CacheItemRemovedCallback callback cho sự kiện này.
+1

+1 Bạn có thể thử [this] (http://weblogs.asp.net/imranbaloch/archive/2010/04/05/reading-all-users-session.aspx) để nhận tất cả Phiên, nhưng tôi sẽ thích bất kỳ cách tiếp cận nào khác. –

+0

@TimSchmelter Điều này có thể chỉ hoạt động với các phiên 'InProc' – VMAtm

+0

Có tất nhiên, đó là một lý do tại sao tôi sẽ không dựa vào nó nếu tôi không phải làm vậy. –

0

Bạn có thể di chuyển giỏ hàng sang cơ sở dữ liệu. Trừ khi bạn có quy trình mua rất nhanh hoặc môi trường cực kỳ dư thừa, phiên hoặc bộ nhớ cache có thể sẽ không đủ bền. Vì chúng không được duy trì, bạn cũng sẽ không có phương pháp trực tiếp để phân tích quyết định mua hàng, tiêu hao, v.v.

Tùy thuộc vào tần suất thay đổi của khoảng không quảng cáo, bạn chỉ có thể xác thực mục hàng có sẵn lúc thanh toán . Là một người sử dụng, nó sẽ rất khó hiểu với tôi khi thấy rằng một món đồ vừa mới biến mất khỏi giỏ hàng của tôi hoặc giá đã thay đổi. Nó sẽ là tốt hơn để rõ ràng gọi điều này ra, theo ý kiến ​​của tôi.

Một lần nữa, cơ sở dữ liệu sẽ là giải pháp vượt trội khi bạn có thể theo dõi trạng thái của mặt hàng tại thời điểm được thêm vào giỏ hàng so với định nghĩa hiện tại của sản phẩm.

Nếu bạn phải sử dụng một giải pháp dựa trên phiên hoặc bộ nhớ cache, thì giải pháp đề xuất của @ VMAtm là một tùy chọn hợp lệ.

+0

Cảm ơn Tim. Ví dụ tôi đưa ra không phải là thế giới thực với tôi. Tôi không có một giỏ hàng, hoặc thậm chí là một cửa hàng cho vấn đề đó. Nó chỉ nhằm mục đích minh họa. Nhưng tôi hiểu tất cả các điểm của bạn. cảm ơn – gregpakes

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