我目前正在为我的学士论文开发一个网站,根据我之前的经验,对header('Location: http://www.example.com/');
的错误使用有时可能会变得非常混乱。
我的问题是:何时或如何使用header('Location: http://www.example.com/');
与使用window.location.replace("http://stackoverflow.com");
?
一个例子:假设我们有一个注册脚本,在完成后,它会将用户重定向到index.php
。哪个更好用,怎么用?
答案 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页面中的 :
需要启用Javascript
不需要PHP。
显示您网站的内容,然后在几个(或0)之后重定向用户 秒。
: 重定向将首先执行,用户永远不会看到后面的内容。 header()必须是php脚本中的第一个命令,在输出任何其他命令之前。如果您尝试在标题之前输出一些,则会收到警告:无法修改标题信息 - 标题已发送