【问题标题】:<meta ... redirect ... inside PHP tags [duplicate]<meta ...重定向... PHP标签内[重复]
【发布时间】:2016-01-25 12:44:01
【问题描述】:

我有一个问题... 我开发了一个 php 安全登录页面,现在当我运行检查以使用“&lt;?php header('location: home.php'); ?&gt;”重定向用户时,无论出于何种原因,它在实际域上都不起作用。

但是我想到了这段代码

<?php 
if (login_check($mysqli) == true) {
echo "<meta http-equiv='refresh' content='0;URL=home.php'>";
}
?>

该代码是否安全且实用?我最关心的是可以利用的隐私。当我在本地服务器上时,它似乎可以工作,我还没有上传它。

还有比我目前更好的方法吗?

【问题讨论】:

  • header() 应该可以工作,你有没有研究过为什么它不工作?也许发布一个关于这个的问题? :)
  • 很好回答你的问题,它会起作用并且你发布的代码是安全的。不过我同意@navnav,你应该看看为什么你没有得到header去工作。
  • 至现已删除的答案:&lt;?php header('LoCATion: http://www.google.com'); ?&gt; 成功重定向。 @luweiqi 你去吧;-)
  • " 现在,当我运行检查以使用 "“它不起作用” - 这可能是由于标题之前的输出造成的。
  • 我要补充一点,它实际上是 安全和实用的,因为您的应用程序似乎在重定向之前向访问者发送数据,从而导致标头重定向失败。您需要解决这个问题,因为您不想将未知数据(错误消息?)发送给未知访问者。

标签: php html tags meta


【解决方案1】:

我会调查为什么header() 无法在您的远程服务器上运行。

调用在条件块内触发,可能条件失败 (login_check($mysqli) == true)。你检查过吗?

header() 出现问题的另一个常见原因是应用程序在调用 header() 之前输出了非标头数据。当您开始从 PHP 脚本输出数据时,PHP 将自动刷新标头。这意味着在调用header() 之前不能输出任何数据,因为标头数据已经被刷新(所以基本上确保在调用header() 之前没有使用echoprint 等。)。

http://php.net/manual/en/function.header.php

另外,我注意到您在打印元刷新后并没有杀死脚本。我会在打印元刷新代码后终止脚本,以防止将任何其他内容提供给用户。所以也许:

if (login_check($mysqli) == true) {
  echo "<meta http-equiv='refresh' content='0;URL=home.php'>";
  die;
}

【讨论】:

  • 感谢您的回答,我得到了它的工作。我认为 必须在 开始之前。现在它似乎正在工作。我会尝试并确保在多个设备上!非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-28
  • 2019-01-19
  • 2013-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多