2012-02-02 79 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

相关问题