Re редактирование ... этот вопрос НЕ был дан раньше!Могу ли я заставить страницу в истории удаляться?
Я понял, что изменение содержимого текущей страницы с помощью window.location заменило кешированную версию исходной страницы (из «последней» истории), так что вы действительно не смогли вернуться с помощью кнопки BACK браузера , Я даже видел, что это было опубликовано как решение, позволяющее злоумышленнику использовать кнопку BACK для повторной отправки формы письма много раз. Но это НЕ работает, потому что в случае электронной почты кнопка BACK просто вернет пользователя обратно к версии POST до версии.
Итак, я могу использовать javascript, чтобы сбросить форму, отключить кнопку SUBMIT, перейти на другую страницу после успеха или сделать все, что захочу на странице. Но все это ни для чего, если простой щелчок кнопки BACK, за которым следует SUBMIT, заставляет форму публиковать снова всего двумя щелчками.
Я знаю, что существует множество решений для предотвращения повторных попыток вредоносных форм, которые я могу попробовать, но у меня были проблемы с их работой, и поэтому я просто хотел бы знать, является ли удаление последней истории тупиком , Если есть способ, и он очень кросс-браузер дружественный, то я могу просто сделать его частью моих скриптовых действий, как только моя форма будет успешно обработана, и отобразится страница «спасибо». В принципе, я бы хотел, чтобы мое «спасибо» на странице «onload», чтобы стереть последнюю историю, или в браузере совместимый способ отключить кнопку BACK!
Для чего стоит, я включил код из простого теста, с которым я работал. Вы можете поместить некоторый барахл в полях и нажать submit. Варвары очищаются в PHP, поля формы очищаются в javascript, и вызывается новое «местоположение». К сожалению, нажатие кнопки BACK вернет вас к форме «предварительно размещенной», при этом все строки, которые вы добавили, остались неповрежденными.
<!DOCTYPE HTML>
<html>
<head>
<title> Form Behavior Test</title>
</head>
<!--
<?php
$name = $email = $comments = "";
$formDone = false;
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
$formDone = true;
$name = $email = $comments = "";
}
?>
-->
<body >
<table border="1"><tr><td style ="text-align:right;" width=100%>
<form name="contactform" id="contactform" method="post" enctype="multipart/form-data" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name" id="name" value="<?php echo $name;?>"><br>
Email: <input type="text" name="email" id="email"value="<?php echo $email;?>"><br>
<br>
<div align="center"> ---- <span class="error">*</span> Message ---- <br>
<textarea name="comments" id="comments" wrap="physical" cols="40" rows="10" ><?php echo $comments;?></textarea>
</div>
<input name="submit" id="submit" type="submit" value="Submit" >
</form>
</td></tr></table>
<script language="JavaScript">
if (<? echo ($formDone == true) ? 'true' : 'false'; ?>)
{
document.getElementById("name").value = "";
document.getElementById("email").value = "";
document.getElementById("comments").value = "";
document.getElementById("submit").value="Disabled";
document.getElementById("submit").disabled=true;
// substitute with a thank you page
window.location = "http://google.com";
}
</script>
</body>
</html>
https://developer.mozilla.org/en-US/docs/Web/API/Location/replace – nikhil
Это не дубликат этого вопроса. Другой вопрос касается только PHP, это один из JAVASCRIPT. Пожалуйста, внимательно прочитайте, прежде чем маркировать как дубликат. – taxicala
@taxicala Согласовано (и проголосовало за повторное открытие), но дублирование представления должно быть реализовано на стороне сервера.Любая клиентская сторона предназначена только для лучшего UX при срабатывании предупреждения. – o11c