2009-02-23 2 views
5

У меня есть приложение ASP.NET с использованием проверки подлинности с помощью форм. Когда пользователь нажимает кнопку «Выход» на странице, он выполняет следующий код.Назад стрелка после выписки

 FormsAuthentication.SignOut(); 
     Response.Expires = 0; 
     Response.Cache.SetNoStore(); 
     Response.AppendHeader("Pragma", "no-cache"); 

Однако пользователь все еще может просто нажать стрелку назад и увидеть предыдущую страницу без необходимости повторного входа в систему. Я уверен, что это связано с тем, что предыдущая страница кэшируется. Как я могу убедиться, что им будет предложено снова войти в систему с возвратом?

+0

Один из способов сделать это - написать код «Без кэша» на всех страницах, но я также ищу более эффективные способы истечения срока действия контента. +1 – Ramesh

ответ

5
Response.Cache.SetCacheability(HttpCacheability.NoCache); 
+0

Ницца. Когда я помещаю это в Page_Load главной страницы, он работает. :-) – Craig

1

И теперь вы знаете, почему вы получили сообщение «Вы вышли из системы. Пожалуйста, закройте это окно браузера по соображениям безопасности».

Кэширование не является обходным путем.

Предпоследним обходным путем является использование ajax для удаления любой важной информации - это будет снова запущено в заднем корпусе, и информация не должна быть кэширована. Это больше соединений и больше латентности, но из-за современного кэширования браузера мало что можно сделать, кроме обходных решений, подобных этим.

-Adam

+0

Я не получаю сообщение «Вы вышли из системы. Пожалуйста, закройте это окно браузера по соображениям безопасности». – Craig

+0

Тогда вы не запрограммировали его. Во многих программных приложениях, где необходима безопасность, например, в режиме PayPal или Outlook, вы получите это или по существу подобное сообщение. Вы можете посмотреть, что они делают, чтобы предотвратить работу кнопки «Назад». Это просто HTTP. –

0

Хотя кэширование не гарантируется, это работает для меня по большей части

//Used for disabling page caching 
    HttpContext.Current.Response.Cache.SetExpires(
     DateTime.UtcNow.AddDays(-1)); 
    HttpContext.Current.Response.Cache.SetValidUntilExpires(false); 
    HttpContext.Current.Response.Cache.SetRevalidation(
     HttpCacheRevalidation.AllCaches); 
    HttpContext.Current.Response.Cache.SetCacheability(
     HttpCacheability.NoCache); 
    HttpContext.Current.Response.Cache.SetNoStore(); 

Выполнить это в методе любой страницы OnInit() (возможно, с помощью базового класса) на любой странице, которую вы не хотите, чтобы пользователи могли кэшировать.

Будьте осторожны, некоторые страницы могут потребовать от вас, чтобы позволить кэширование таких, как делать загрузку файлов на SSL-страниц и т.д.

Я нашел этот код куда-нибудь, если я найду ссылку, я буду обновлять этот пост.