我有一个网络表单,允许用户提交数据。
注意:数据不会存储在服务器上,而是发送到电子邮件地址。
当用户单击“提交”按钮时,表单处理程序会将用户重定向到“已发送确认”页面,其中显示...“感谢您提交表单。”
header('位置:/sentconfirmation.php');
这样做的问题是,用户可以简单地在他们的浏览器中输入:(示例)mywebsite.com/sentconfirmation.php,然后截图以声称他们已经发送了表单,而实际上他们还没有发送。
有没有办法阻止用户直接访问发送的确认页面,而只有通过实际发送表单才能到达那里?
或者也许有一种方法可以屏蔽发送的确认页面的网址?
是的,这是有可能实现的。在这种情况下,我很可能会使用 PHP 的会话功能。
您可以在会话中存储表单提交状态,并基于该状态,您可以允许用户访问该页面或以其他方式阻止。
我会这样做:
通过在两个页面顶部添加以下行,确保两个页面都可以使用 PHP 的会话功能:
<?php
session_start();
在重定向标头之前添加以下行:
<?php
$_SESSION['form_submitted'] = true;
您可以在重定向页面上检查该值。
<?php
session_start();
if (!isset($_SESSION['form_submitted']) || $_SESSION['form_submitted'] !== true) {
// Redirect to the form page if the session variable is not set
header('Location: /index.php');
exit;
}
// Unset the session variable to prevent users from refreshing the page and seeing it again
unset($_SESSION['form_submitted']);
// Display your confirmation message
echo "Thank you for submitting your form.";
希望这有帮助。