Отключить кеширование в Fire Fox в ASP.NET и C # - PullRequest
1 голос
/ 08 июня 2011

Я разработал веб-приложение, которое обрабатывает платежи по кредитным картам, и когда пользователь нажимает кнопку возврата в Fire Fox после получения страницы подтверждения платежа, он публикует дубликат платежа.

Я помещаю следующеекод в форме оплаты и на странице подтверждения, и он по-прежнему публикует повторяющиеся платежи:

Response.Cache.SetExpires(DateTime.UtcNow.AddYears(-1));
Response.Cache.SetValidUntilExpires(false);
Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches);
Response.Cache.SetAllowResponseInBrowserHistory(false);
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetNoStore();

Что я делаю неправильно и как я могу это исправить?

Ответы [ 2 ]

2 голосов
/ 08 июня 2011

повторный имеет хороший момент в комментариях. Что касается этой проблемы, попробуйте этот код ( source ):

   Response.ClearHeaders();
   Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
   Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
   Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
   Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
   Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
   Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
   Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
   Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
   Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
   Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 

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

1 голос
/ 08 июня 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...