Как использовать кеш в ASP.NET, который доступен для всех пользователей, а не только для определенного пользовательского контекста, при одновременном удалении определенного ключа этого кэша, когда пользователь закрывает окно браузера или истекает (например, объект сеанса)?Использование кэша ASP.NET
ответ
Cache доступен для всех пользователей, вы можете установить его истекает после определенного периода времени:
Cache.Insert("key", myTimeSensitiveData, null,
DateTime.Now.AddMinutes(1), TimeSpan.Zero);
Вы можете удалить запись кэша всякий раз, когда сеанс завершается путем осуществления конечного сеанса событие в global.asax в
void Session_End(Object sender, EventArgs E)
{
Cache.Remove("MyData1");
}
this Смотрите для более подробной информации о Cache
Отредактировано: Что касается вашего вопроса о том, как реагировать, когда пользователь закрывает свой браузер, я думаю, что это не просто. Вы можете попробовать javascript на стороне клиента, чтобы обрабатывать событие «разгрузить», но это не является надежным, так как браузер/клиент может просто сбой. По моему мнению, подход «сердцебиение» будет работать, но он требует дополнительных усилий. См. Это question для получения дополнительной информации.
Хорошо, но как этот ключ будет удален автоматически при завершении сеанса пользователя? –
Использование события окончания сеанса global.asax: void Session_End (отправитель объекта, EventArgs E) { } – Ulises
+1. Обратите внимание: нет события, когда пользователь закрывает браузер, а Session_End не запускается для внепроцессного (SQL и государственной службы). –
Чтобы удалить элемент из кеша, вам необходимо использовать the Session_OnEnd() event. Однако это событие не срабатывает, если пользователь просто закрывает браузер. Событие будет срабатывать только при тайм-ауте сеанса. Вы, вероятно, следует добавить проверку, чтобы увидеть, если элемент уже удален:
public void Session_OnEnd()
{
// You need some identifier unique to the user's session
if (Cache["userID"] != null)
Cache.Remove("userID");
}
Кроме того, если вы хотите, чтобы элемент в кэше, чтобы оставаться активным на протяжении сеанса пользователя, вы должны будете использовать скользящее истечение по элементу и обновление с каждым запросом. Я делаю это в OnActionExecuted (только для ASP.NET MVC).
protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Put object back in cache in part to update any changes
// but also to update the sliding expiration
filterContext.HttpContext.Cache.Insert("userID", myObject, null, Cache.NoAbsoluteExpiration,
TimeSpan.FromMinutes(20), CacheItemPriority.Normal, null);
base.OnActionExecuted(filterContext);
}
- 1. Использование кэша ASP.NET
- 2. Менеджер кэша для ASP.NET
- 3. Расположение кэша ASP.NET
- 4. Сохранение кода кэша ASP.NET
- 5. Максимальный размер кэша ASP.NET
- 6. ASP.Net - Использование результатов GZIP в коррупции при извлечении из кэша
- 7. Страницы, исчезающие из кэша asp.net
- 8. управлять объектами кэша в asp.net
- 9. Стратегия кэша Buster в ASP.Net
- 10. Раздел кэша HTML-кода - ASP.Net
- 11. Частный объект кэша в ASP.NET
- 12. Главная страница кэша в ASP.NET
- 13. Браузер игнорирует настройки кэша asp.net
- 14. Повторное использование повторного использования кэша
- 15. Hadoop MapReduce Распределенное использование кэша
- 16. Использование углового-кэша в app.config()
- 17. Использование памяти MySQL и кэша
- 18. Использование кэша HTML5 с Querystring
- 19. Использование кэша Efficent в C
- 20. Использование кэша в приложении android
- 21. Использование кэша для хранения битмапов
- 22. Django: рекурсивное использование кэша «request.POST»?
- 23. Использование распределенного кэша - HIVE STREAMING
- 24. Файлы кэша в ASP.NET MVC 4
- 25. Очистка кэша MVC Asp.net для i.e
- 26. Класс кэша ASP.NET против класса MemoryCache
- 27. Как определить общий размер кэша ASP.Net?
- 28. Использует ли фильтры кэша ASP.NET MVC 3?
- 29. Как определить размер элемента кэша ASP.net?
- 30. Изменение частоты истечения срока действия кэша ASP.NET?
Почему общий кеш среди всех, но отдельные ключи удалены для каждого пользователя? Почему бы просто не использовать сеанс? –
Потому что я все еще хочу, чтобы другой пользователь мог получить доступ к этому объекту! –
Вам нужно более подробно объяснить, что вы пытаетесь сделать. Это непонятно, и это поможет в получении вашего ответа. Можете ли вы изменить свой вопрос и предоставить более подробную информацию? – agarcian