Фильтры OutputCache и Authorize в MVC3

Я читаю книгу о MVC2, и в разделе OutputCache говорится:

Предупреждение В предыдущем разделе "Как фильтры авторизации взаимодействуют с кэшированием вывода", я объяснил, что [Authorize] имеет специальное поведение, чтобы гарантировать, что неавторизованные посетители не смогут получить конфиденциальную информацию только потому, что она уже кэширована. Однако, если вы специально не запретите это, все еще возможно, что кэшированный вывод может быть доставлен другому авторизованному пользователю, отличному от того, для которого он был изначально создан. Один из способов предотвратить это - реализовать контроль доступа для определенного элемента контента в качестве фильтра авторизации (производного от AuthorizeAttribute) вместо простого применения встроенной логики авторизации в методе действия, поскольку AuthorizeAttribute знает, как избежать обхода кэшированием вывода. Тщательно протестируйте, чтобы гарантировать, что авторизация и выходное кэширование взаимодействуют так, как вы ожидаете.

Это все еще верно в MVC3?

Если утвердительно, как это предотвратить? (потому что объяснение в книге слишком расплывчато).

С уважением.

1 ответ

Решение

Я думаю, что это.

Когда вы используете OutPutCache для кэширования данных, эти данные кэшируются глобально. Пока пользователь авторизован, он будет получать кешированные данные.

Да, у нас есть опции "VaryByParam" для выходного кэша, но он также создает новый кэш для каждого передаваемого параметра. что означает, что это все еще глобально.

Поэтому, если вы хотите кэшировать разные данные, основанные на пользователях, выходной кэш может быть неправильным способом сделать это. Если данные зависят от пользователя, сеанс является правильным выбором. это то, для чего живет сессия

Другие вопросы по тегам