PHP标头位置与JavaScript重定向

时间:2018-05-03 15:45:57

标签: javascript php

我目前正在为我的学士论文开发一个网站,根据我之前的经验,对header('Location: http://www.example.com/');的错误使用有时可能会变得非常混乱。

我的问题是:何时或如何使用header('Location: http://www.example.com/');与使用window.location.replace("http://stackoverflow.com");

一个例子:假设我们有一个注册脚本,在完成后,它会将用户重定向到index.php。哪个更好用,怎么用?

3 个答案:

答案 0 :(得分:4)

我个人总是会推荐一个基于JS的PHP重定向。

你归咎于PHP重定向的混乱,我相信只有当你忽略了之后终止脚本immediatley,或者你在发出标题之前允许输出时才会发生。后者是你需要解决的问题,但是前者:

header('Location: http://www.example.com/');
exit;

很容易解决。

JavaScript重定向为您的服务器和访问者提供了更多的工作:整个页面必须由您的服务器构建并发送给您的用户。浏览器将在重定向命中之前开始下载链接的图像,脚本和样式表。最重要的是,您需要希望访问者未禁用JavaScript。

TL; DR:PHP更快,消耗更少的服务器资源和带宽

答案 1 :(得分:1)

这取决于您如何实现注册,如果您使用典型表单将用户的凭据发送到服务器,那么在身份验证之后您应该使用PHP标头位置。

如果您通过JavaScript将用户的凭据发送到api,api会对它们进行身份验证并发回json数据响应,此时使用JavaScript重定向。

答案 2 :(得分:0)

当JS关闭时,第一种情况将失败。它也有点慢,因为必须首先解析JS(必须加载DOM)。然而,JS更安全,因为目的地不知道引用者并且您的重定向可能被跟踪(引用者通常不可靠但这是事情)。

所有选项的结果都相同(标题位置与JavaScript重定向): html页面中的

  • 显示您网站的内容,然后在几个(或0)之后重定向用户 秒。
  • 不需要启用JavaScript。
  • 不需要PHP。
JS上的

  • 需要启用Javascript

  • 不需要PHP。

  • 显示您网站的内容,然后在几个(或0)之后重定向用户 秒。

PHP中的

重定向将首先执行,用户永远不会看到后面的内容。 header()必须是php脚本中的第一个命令,在输出任何其他命令之前。如果您尝试在标题之前输出一些,则会收到警告:无法修改标题信息 - 标题已发送