2015-01-24 3 views
1

В моем MVC-приложении asp.net каждая страница содержит множество данных, которые очень редко меняются, но по-прежнему зависят от пользователя и не должны использоваться совместно с другими пользователями.Допустимо ли хранить пользовательские данные в C# Runtime MemoryCache?

Я не мог найти решение на стороне сервера, которое обрабатывало кеш для каждого пользователя, поэтому моя идея - просто использовать «стандартный» кэш памяти и использовать идентификатор пользователя как часть ключа.

Это приемлемо? Не хватает ли каких-либо рисков для безопасности?

Благодаря

EDIT: (добавлены подробности)

Это данные, которые первоначально хранятся в базе данных, например, у меня есть заказные выпадающий список (который извлекается с помощью AJAX и возвращает jsonresult) для категорий продуктов. Я хочу иметь возможность вручную очистить кеш, если пользователь добавит категорию через настройки, и мне нужно получить список «новых» категорий. Насколько я знаю, я не могу вручную очистить кеш OutputCache. У меня также есть сценарий, в котором я хочу обновлять определенный элемент кэша каждую минуту (для некоторых обновлений на экране пользователя).

+0

Вы готовы потерять данные? – usr

+0

Вы пробовали OutputCache? Вы можете реализовать свойство VarByCustom – heymega

+0

Это данные, которые изначально хранятся в базе данных, например, у меня есть выпадающий список, созданный по индивидуальному заказу (который извлекается с использованием AJAX) для категорий продуктов. Я хочу иметь возможность вручную очистить кеш, если пользователь добавит категорию через настройки, и мне нужно получить список «новых» категорий. Насколько я знаю, я не могу вручную очистить кеш с помощью OutputCache. – NeedACar

ответ

0

Обозначьте свое действие с помощью OutputCache и убедитесь, что действие предназначено только для авторизированного доступа.

[Authorized, OutputCache(VaryByCustom = "USER")] 
public ActionResult SlowAction() { } 

Затем в Global.asax.cs переопределить обработчик '' VaryByCustom

public override string GetVaryByCustomString(HttpContext context, string custom) 
{ 
    switch (custom) 
    { 
     case "USER": 
      return context.User.Identity.Name; 
     default: 
      return null; 
    } 
} 
+0

Я посмотрю на это, если я смогу использовать выходной файл для некоторых других целей, но я не думаю, что кеш вывода отвечает всем требованиям относительно ручной очистки и т. Д., Я обновил свой вопрос выше. – NeedACar

Смежные вопросы