【问题标题】:Redirect using post and get the succes of the redirect使用 post 重定向并获得重定向成功
【发布时间】:2014-09-08 17:27:29
【问题描述】:

比如说,我的网站上有一个简单的表单,其中包含三个字段:姓名、密码和电子邮件。

  1. 我必须从用户那里获取这些信息,并保存在我的数据库中。
  2. 然后重定向到另一个网站并使用 post 发送所有这些信息。
  3. 我还必须知道用户是否已成功重定向到该站点(HTTP STATUS 200)。

这是我的做法:

对于第 1 点,我只是提交表单。

数据成功保存在我的数据库中后,我将呈现以下带有隐藏字段的表单。这被提交并且用户被重定向到 anotherwebsite.com

    <form id="form_id" action="https://www.anotherwebsite.com/form" method="POST">
    <input type ="hidden" name ="name" value ="$name">
    <input type ="hidden" name ="password" value ="$password">
    <input type ="hidden" name ="email" value ="$email">
    </form>
    <script> document.getElementById('form_id').submit();  </script>

问题

  1. 我认为我实现第 1 点和第 2 点的策略不正确。我需要一个更好的解决方案。提交表单,然后渲染一个带有隐藏字段的页面,然后再次提交以重定向到另一个站点,感觉不对。

  2. 我不知道要达到第三点。

【问题讨论】:

  • 无法知道表单提交后会发生什么。它重新加载页面并且您的脚本停止运行。

标签: javascript html perl redirect post


【解决方案1】:

根据您的问题,您可以尝试这种方法:

  1. 在文件 (HTML) 中创建包含名称、密码、电子邮件字段的表单。
  2. 将表单提交到服务器。
  3. 在服务器端获取数据(包括变量中的表单属性)并将其保存到数据库中。
  4. 然后重定向到给定的网站(使用您在步骤 3 中存储的变量)。

您可以使用任何服务器端脚本语言轻松了解状态(202 或任何错误)。

【讨论】:

    【解决方案2】:

    如果您将用户发送到另一个网站,知道用户已成功重定向的唯一方法是该网站以某种方式通知您。一旦用户离开您的页面(这就是重定向 - 它告诉浏览器“离开此 URI 并转到此 URI”),该页面上的脚本将停止运行,因此他们无法收集任何进一步的信息。

    如果你只需要知道信息提交成功,你的脚本可以在后台POST数据,等待200响应,然后信息提交后重定向。但这可能不符合您的要求,因为您仍然不知道重定向是否成功。

    确实让您知道另一个站点上的页面是否正确加载的另一种可能性是在新的浏览器窗口/选项卡中打开它而不是重定向。这是在加载另一个页面时保持页面活动(从而使脚本能够运行)的唯一方法。但是,它引入了其他问题,例如如何处理原始页面。 (让它在后台打开(可能会使用户感到困惑)或在看到新 URI 已加载后自行关闭(可能会在打开一个窗口/选项卡然后关闭原始窗口/选项卡时导致不良的视觉伪影;破坏浏览器历史记录)?)

    如果可能的话,让最终目的地站点在交易完成时通知您几乎可以肯定是最好的方法。

    【讨论】:

      【解决方案3】:

      要实现第 3 点,如果您实际尝试实现登录兼成员区域系统,则需要使用 cookie。否则,您只需在条件语句中进行重定向。

      my $cgi = CGI->new; 
      if (condition) { print $cgi->redirect('https://www.examplesite.com/file.html') }
      

      关于第 1-2 点的一般方法,您可以在此处查看教程: http://practicalperl5.blogspot.com/

      【讨论】:

      • 如果用户被重定向到另一个站点(而不仅仅是同一站点上的另一个页面),cookie 将不适用于#3,因为 cookie 是特定于站点的。除非浏览器存在严重安全漏洞,否则它绝不会将 cookie 发送到设置它们的站点以外的任何站点。
      • 是的,我知道。但是我认为对于那些无法实现 html 表单并通过 cgi 将值传递给后端脚本的人来说,即使他写了“另一个站点”.. 他也可能试图实现一个登录会员区系统。但我想我会编辑两者的答案。谢谢。
      猜你喜欢
      • 2020-03-20
      • 1970-01-01
      • 2016-12-27
      • 2017-01-10
      • 2019-08-13
      • 1970-01-01
      • 2014-10-25
      • 2014-08-07
      • 1970-01-01
      相关资源
      最近更新 更多