2012-02-02 76 views
7

有沒有辦法清除所有用戶的會話緩存鍵?有沒有辦法清除所有用戶的會話緩存鍵?

例如,我將當前選定的商店項目的用戶存儲在以下會話密鑰「currentItem」下。在網站的管理區域,我決定刪除那個特定的商店項目。我現在想要使所有會話中的所有「currentItem」緩存條目無效。

有沒有辦法做到這一點?

我意識到我給出的這個例子有點過意思,但它卻得到了重點。我懷疑一種解決方案是使用正常的Cache api來存儲所有用戶當前的項目。這樣我可以在需要時使它們失效。

感謝

回答

3

你不能得到所有用戶
當前所有的會話(坦白地說,you can,但我不建議這樣做,仍然只能讀取InProc sessions這種方式)。

所以,你唯一可以做的事情是這樣的:

  • 存放在Session只有用戶購物車
  • 相應ID到Cache
  • 然後添加項目添加項目IDCache,設置dependency to the Item
  • 然後,只需生成事件即可更改Cache中的整個購物車。
  • 此外,您應該考慮重新創建物品,如果由於某些原因Cache正在清空 - 您應該爲此活動提供CacheItemRemovedCallback callback
+1

+1您可以嘗試[this](http://weblogs.asp.net/imranbaloch/archive/2010/04/05/reading-all-users-session.aspx)獲取所有會話,但我會更喜歡任何其他方法。 – 2012-02-02 09:31:30

+0

@TimSchmelter這隻能用於InProc會話 – VMAtm 2012-02-02 09:34:14

+0

當然,是的,這就是爲什麼我不必依靠它的原因之一。 – 2012-02-02 09:49:36

0

您可以將購物車移動到數據庫。除非你有一個非常快速的購買過程,或者一個非常冗餘的環境,否則Session或Cache可能不夠耐用。由於它們沒有被持續存在,因此您也不會有直接的方法來分析購買決策,流失等。

根據您的庫存更改的頻率,您可能只需驗證購物車項目在結帳時是否可用。作爲用戶,看到一件物品剛從我的購物車中「神奇地」消失或者價格發生了變化,我感到非常困惑。在我看來,最好明確地表明這一點。

同樣,數據庫將是一個優秀的解決方案,因爲您可以跟蹤物品在添加到購物車時與當前產品定義相對應的狀態。

如果您必須使用基於會話或基於緩存的解決方案,那麼@VMAtm建議的解決方案是一個有效的選擇。

+0

謝謝蒂姆。我給的例子對我來說不是現實世界。我沒有購物車,甚至沒有購物車。這僅僅是爲了說明的目的。但我理解你的觀點。謝謝 – gregpakes 2012-02-02 10:02:38

相關問題