2014-08-28 2 views
1

Я пытаюсь найти кросс-браузерную реализацию, которая будет работать для следующей ситуации.Как запретить браузеру возвращаться на внешний сайт?

Пользователь заполняет одно из наших онлайн-приложений и перенаправляется на внешнюю онлайн-систему оплаты. Они вносят свои банковские реквизиты и затем перенаправляются обратно в наше приложение, где они представлены с подтверждением.

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

Есть ли стандартное решение этой проблемы?

+1

Существует - вы не используете API, который использует переадресацию браузера, вы используете свой сервер для реализации логики оплаты (AKA API, который сложнее реализовать). Если вы выберете метод переадресации браузера - вы предполагаете, что пользователь не глупый и что они не будут нажимать кнопку «назад» без видимой причины. Если они действительно нажимают на нее, вам не нужно это контролировать, поэтому вы не обязаны выполнять эту защиту «не стреляйте в мою собственную ногу». –

+2

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

ответ

0

да, вы можете выполнить дополнительное перенаправление на странице подтверждения, например, в верхней части:

if(!isset($_GET['x'])){ 
    header("Location: ./?x=x"); 
    exit(); 
} 

затем, если пользователь нажимает назад, они попали в ту же страницу, без получить переменную, и быть перенаправлено снова