Как удалить страницу из истории браузера? - PullRequest
15 голосов
/ 14 ноября 2008

У меня есть страница ASP.Net, которая содержит кнопку. Эта страница содержит кнопку ServerSide Paypal.

При нажатии мой сервер делает различные умные вещи на серверной части, а затем переписывает ответ в виде формы и некоторый JavaScript, который отправляет эту форму в PayPal ..

Все это прекрасно работает.

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

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

Как я могу удалить свою страницу из истории или просто сделать так, чтобы она никогда не появлялась?

Обновление: спасибо всем ... Это отличные ответы. Проголосовал за все хорошие, но пошел на сплатне за разумное использование скрытого поля, а не куки для принятия решения.

Ответы [ 7 ]

19 голосов
/ 14 ноября 2008
window.location.replace(URL);

window.location

заменить (URL)

Заменить текущий документ на один по указанному URL. отличие от метода assign () что после использования replace () текущий страница не будет сохранена в сеансе история, то есть пользователь не будет возможность использовать кнопку Назад, чтобы перейдите к нему.

6 голосов
/ 14 ноября 2008

Я не уверен, что это можно сделать. Но вот идея, как можно предотвратить повторную отправку формы.

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

Если он не пуст при отправке, вы знаете, что форма была отправлена ​​ранее, и вы можете предупредить пользователя.

5 голосов
/ 14 ноября 2008

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

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

2 голосов
/ 14 ноября 2008

Я не уверен, что вы можете сделать это легко с интеграцией PayPal, но Для решения этой проблемы можно использовать шаблон «Post / Redirect / Get»

2 голосов
/ 14 ноября 2008

Возможно, вы можете установить cookie перед отправкой формы.

Когда страница загружена, проверьте наличие этого файла cookie (то есть форма уже отправлена). Если найдено, вместо автоматической отправки формы, автоматически вернитесь назад (window.history.back()).

0 голосов
/ 13 января 2017

Вы можете просто запрограммировать свою страницу так, чтобы она не отправлялась, или делала что-то / перемещалась куда-то еще, если window.referer - это страница Paypal, которую вы пытаетесь избежать повторного вызова.

0 голосов
/ 29 марта 2013

Полезный совет для некоторых может быть таким ...

window.history.go(-2);

особенно в появлении всплывающего окна предупреждения о сбое нагрузки.

...