Фильтры OutputCache и Authorize в MVC3 - PullRequest
5 голосов
/ 18 июля 2011

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

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

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

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

Привет.

1 Ответ

5 голосов
/ 18 июля 2011

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

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

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

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

...