如果我理解你的问题,你有 2 页,比如说:
- your-site.com/page-one
- your-site.com/page-two
它们都包含带有name 和name2 输入的<form>。两者都将发布到同一个 PHP 脚本,比如 your-site.com/submit-name。
好吧,如果你的提交 URL 是用一些 PHP 处理的,那么你有几个选择:
A) 读取 HTTP 引用标头
当您单击链接或提交表单时,浏览器通常会从其来源发送 URL。这是 HTTP 引用标头。在 PHP 中,你可以这样得到它:
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
您可以在处理后使用它来将用户重定向回那里。
我只是验证它来自您的网站,而不是来自任何地方。应该进行此检查,因为任何人都可以使用指向您的提交 URL 的 action 属性创建<form>。在这种情况下,您不应该处理提交,除非它是您想要的。
B) 添加一个隐藏的输入字段,其中包含您来自哪里的信息
如果您不想阅读 HTTP 引用标头,您还可以添加一个隐藏的表单输入,其中包含您的 PHP 脚本可以用来重定向到相应页面的信息。示例:
<form action="/submit-form" method="POST">
<div class="column">
<!-- Send info to know where you should redirect to. -->
<input type="hidden" name="redirect_to" value="page-one">
<!-- build_id should change to prevent from CSRF -->
<input type="hidden" name="build_id" value="78934hBvcdWes343">
<!-- The rest of your form: -->
<input name="name" placeholder="Your name">
<input name="name2" placeholder="Type your name again">
<button type="submit">Submit</button>
</div>
</form>
安全良好做法
我刚刚在您的表单中添加了一个构建 ID(也称为表单令牌)。这不是您问题的一部分,也不是强制性的,这只是一个好习惯。这个想法是,当您处理来自用户的数据时,通常是为了更改用户的姓名或对他的个人数据做任何事情,您应该保护自己免受cross site request forgery 的侵害。这可以通过使用POST 而不是GET 并通过在用户会话中存储随机生成的值来完成,该值插入到表单的隐藏输入中。当您收到提交时,您会将收到的内容与您在会话中的内容进行比较。如果它们不匹配,那么您不应该处理提交。检查referer也将提高安全性。
PHP 重定向
在 PHP 中,要告诉浏览器重定向到另一个页面,你应该这样做:
<?php
header('Location: https://your-site.com/page-one');
exit;
因此,通常为您的根网站 URL 创建一个常量或定义的值,然后使用您的验证步骤和逻辑构建位置 URL。
您还可以使用$_SERVER 从协议和服务器名称动态重建 URL。请注意$_SERVER['HTTP_HOST'] 可能不是您自己的网站域名,因为攻击者可以通过发送另一个主机名标头来向您的服务器发送请求。如果您的站点是服务器的默认网站,那么您的重定向可能指向攻击者的域而不是您的域。但在大多数情况下,如果您将网站托管在共享服务器上,则不会发生这种情况,因为您的域是虚拟主机,默认虚拟主机通常应该是托管公司设置的空白页面。