Есть ли способ очистить ключ кэша сеанса для всех пользователей?
Есть ли способ очистить ключ кэша сеанса для всех пользователей?
Например, я сохраняю выбранный пользователем элемент магазина под следующим ключом сеанса "currentItem". В области управления веб-сайтом я решаю удалить этот конкретный элемент магазина. Теперь я хочу сделать недействительными все записи кэша "currentItem" во всех сеансах.
Есть ли способ сделать это?
Я понимаю, что пример, который я привел, немного надуманный, но в нем есть смысл. Я подозреваю, что одним из решений было бы использование обычного API Cache для хранения всех текущих элементов пользователей. Таким образом, я мог бы сделать их недействительными, когда это необходимо.
Спасибо
2 ответа
Вы не можете получить все текущие сеансы от всех пользователей
(Честно говоря, вы можете, но я не рекомендую это, и все же вы можете только читать InProc sessions
сюда).
Так что единственное, что вы можете сделать, это что-то вроде этого:
- Магазин в
Session
толькоID
пользовательской корзины - Добавить товар с соответствующим
ID
в кеш - Затем добавление элемента в
Cache
установить зависимость для элемента - Затем просто создайте событие, чтобы изменить целые корзины в
Cache
, - Также вам следует подумать о воссоздании предметов, если по каким-то причинам
Cache
опустошается - вы должны предоставитьCacheItemRemovedCallback
обратный звонок для этого события.
Вы можете переместить корзину в базу данных. Если у вас нет очень быстрого процесса покупки или крайне избыточной среды, Session или Cache, вероятно, не будут достаточно долговечными. Поскольку они не сохраняются, у вас также не будет прямого метода для анализа решений о покупке, истощении и т. Д.
В зависимости от того, как часто меняется ваш инвентарь, вам может потребоваться только подтвердить, что товар в корзине доступен при оформлении заказа. Как пользователь, мне было бы очень странно видеть, что товар просто "волшебным образом" исчез из моей корзины или что цена изменилась. На мой взгляд, было бы лучше явно это назвать.
Опять же, база данных будет лучшим решением, так как вы можете отслеживать состояние товара в момент его добавления в корзину в соответствии с текущим определением товара.
Если вам необходимо использовать решение на основе сеанса или кэша, предлагаемое решение @VMAtm является допустимым вариантом.