【问题标题】:PHP: Persist form data across redirectPHP:跨重定向保留表单数据
【发布时间】:2013-03-21 05:26:12
【问题描述】:

我有一个现有的网站,上面有大量对http://domain.com 的引用。我们想在页面上强制执行 https,所以我添加了一个简单的代码 sn -p:

    if($_SERVER["HTTPS"] != "on") {
        die(header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]));
        exit(); // to ensure the script stops here, just in case
    }

这行得通,除了很多文件在操作中都有带有 http 的自引用表单。例如,在 page.php 上可能有:

<form action="http://domain.com/page.php" method="post">
<input type="text" name="sample" />
<input type="submit" value="Next" />
</form>

我有什么方法可以在不破坏所有这些形式的情况下从上面强制执行此重定向 sn-p? 目标是避免手动更新 100 多个文件中的每一个来进行繁琐的查找/替换“http/https”的单步执行。

【问题讨论】:

  • 任何合适的代码编辑器都有“在集合文件中查找和替换”功能,可以在一分钟内找到所有文件匹配条件并将http://domain.com替换为https://domain.com。以 Notepad++ 为例。
  • 是的,这就是我所说的繁琐的“查找/替换”的意思。我不能将它应用于交换http://domainhttps://domain,因为很多时候域被提取(即:http://&lt;?php echo $DOMAIN; ?&gt;)。多亏了以前的开发人员,这真是一团糟,我只是希望通过避免这种乏味的查找/替换来节省客户一些时间。好像不行。

标签: php forms http redirect persist


【解决方案1】:

不,您不能只是重定向,因为无论如何您都在提交不安全的内容,重定向到 https 将毫无意义,因为请求已经可见。

您应该使用相对网址。其中/ 与域名相同

/ = domain.com

/page = domain.com/page

没有前导 / 的 url 是相对于当前 uri 的(减去查询变量): 所以,来自http://domain.com/page -

行动:foo = http://domain.com/page/foo

行动:/foo = http://domain.com/foo

http 或 https 会以这种方式保存。

另一种方法是用 2 个斜杠动作引导域://domain.com 虽然我认为旧 IE 版本不明白。

【讨论】:

  • 好点,没有考虑到不安全的内容提交;只是考虑从数据库中提取。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-12-21
  • 2015-02-05
  • 2020-11-08
  • 1970-01-01
相关资源
最近更新 更多