【问题标题】:How do I redirect to a specific page depending on the received variable? [closed]如何根据收到的变量重定向到特定页面? [关闭]
【发布时间】:2021-09-30 03:31:00
【问题描述】:

所以我有 2 个页面,您可以在其中输入文本,然后将其发送到一个名为 newposts 的页面。我可以做些什么来重定向到我提交数据的页面?例如:如何从一个页面发布内容,以便在提交时将其重定向回我提交数据的页面?

【问题讨论】:

  • 你的解释有点曲解。你的意思是当你从你的 html 页面提交数据到你的 php 页面时,相同的数据会从 php 页面发送回发送它的同一个 html 页面?
  • 您的问题不够清晰,但我想我理解并提交了答案。请花点时间让其他用户更清楚您的问题,因为在线问答可以帮助面临同样问题的其他人。
  • 您能否分享更多细节,例如您解决问题的尝试?
  • 是的,感谢您的帮助。所以我使用了 $_SERVER[HTTP_REFERER] 并解决了我的问题。再次感谢它确实解决了我的问题。抱歉,如果问题没有明确描述,因为这是我第一次在这里提问。

标签: php html mysql


【解决方案1】:

如果我理解你的问题,你有 2 页,比如说:

  • your-site.com/page-one
  • your-site.com/page-two

它们都包含带有namename2 输入的<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'] 可能不是您自己的网站域名,因为攻击者可以通过发送另一个主机名标头来向您的服务器发送请求。如果您的站点是服务器的默认网站,那么您的重定向可能指向攻击者的域而不是您的域。但在大多数情况下,如果您将网站托管在共享服务器上,则不会发生这种情况,因为您的域是虚拟主机,默认虚拟主机通常应该是托管公司设置的空白页面。

【讨论】:

  • 非常感谢您的帮助。我已经设法使用 HTTP_REFERER 将其重定向到其源页面来解决它。
猜你喜欢
  • 1970-01-01
  • 2016-10-18
  • 2018-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多