Как удалить страницу из истории браузера?

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

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

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

Однако, если пользователь затем решит нажать «Назад», он перейдет к созданной мной форме самостоятельной публикации, которая снова перенаправит его в Paypal.

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

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

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


person Rory Becker    schedule 14.11.2008    source источник
comment
Может ли эта статья от Microsoft помочь? Управление историей браузера с помощью серверных элементов управления ASP.NET (менеджер сценариев) msdn.microsoft.com/ en-us/library/cc488548.aspx   -  person Kman    schedule 27.09.2018


Ответы (8)


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

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

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

person splattne    schedule 14.11.2008
comment
Отлично... на самом деле, я думаю, что если я обнаружу, что это значение уже заполнено, я просто выполню другое :) - person Rory Becker; 14.11.2008

window.location.replace(URL);

window.location:

заменить (адрес)

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

person Eugene Yokota    schedule 14.11.2008
comment
Я не думаю, что это сработает, так как мне необходимо опубликовать текущую страницу, чтобы передать данные, необходимые для PayPal. Поэтому у меня есть js -> document.getElementById('form1').submit(); который я не могу заменить вашим предложением замены - person Rory Becker; 14.11.2008
comment
Возможно, это не соответствовало тому, что искал ОП, но это действительно помогло мне решить другую проблему. Спасибо! - person Danation; 07.02.2013

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

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

person dub    schedule 14.11.2008
comment
Когда пользователь возвращается со страницы PayPal, браузер извлекает сгенерированную форму из своего кеша и должным образом снова публикует сам себя. Дальнейший контакт с сервером отсутствует. Поэтому я не понимаю, как я могу использовать сервер, чтобы предотвратить это. - person Rory Becker; 14.11.2008
comment
Вы предполагаете, что у автоматически сгенерированной формы может быть некоторая условная логика, которая либо публикует, либо выполняет другую обратную () .. на какой логике она может основываться? - person Rory Becker; 14.11.2008
comment
Что я могу сказать.... splattne ответил на этот вопрос через несколько секунд после того, как я его задал :) - person Rory Becker; 14.11.2008
comment
@dub идея состоит не в том, чтобы получить контроль над браузером пользователя, а в том, чтобы передать правильное намерение браузеру. window.location.replace реализует это намерение. Выполнение хаков — нет, и я считаю, что другие не должны заниматься хакерством для получения результатов, если нет стандартного способа выразить то, что они хотят, для браузера. Если пользователь ломает свой веб-клиент по собственной воле, то это был его выбор, чтобы его клиент возвращался к страницам, на которые он не должен возвращаться, и это нормально, если вы не полагаетесь на клиента в плане безопасности. - person Ben Barkay; 24.07.2013

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

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

person Patrick McElhaney    schedule 14.11.2008

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

person Rich    schedule 14.11.2008

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

window.history.go(-2);

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

person MistereeDevlord    schedule 29.03.2013

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

person ChrisFox    schedule 13.01.2017

person    schedule
comment
Вам нужно объяснить свое решение. - person Lajos Arpad; 01.05.2020