我必须在我的脚本中大量使用重定向,例如在用户登录后我需要将它们重定向到管理区域等等。但是我觉得总是必须让头部功能处于最顶端是不方便的。因此,如果我使用元刷新标签进行重定向,那么根据最佳实践会不会满足于这一点,还是可以接受?
function redirect($location) {
echo "<meta http-equiv='refresh' content='0; url=$location' />";
}
答案 0 :(得分:10)
否。 Wikipedia明确指出:
元刷新是一种不鼓励的方法,用于指示Web浏览器在给定的时间间隔后自动刷新当前的网页或帧.......
元刷新标签有一些缺点:
答案 1 :(得分:1)
我个人会使用header()函数,然后用户不必等待另一个页面加载。
答案 2 :(得分:0)
我个人使用header()函数,但Meta
只是将页面刷新到该url而不是重定向,因此它有可能杀死cookie /会话,而header()
仅在没有任何帖子发布时才有效您使用它之前的网站。他们都有起伏。
答案 3 :(得分:0)
这取决于您的需求。
如果您必须在登录后重定向用户,则必须使用标题重定向。
由于上述原因,不建议使用元刷新,但如果需要,则可以使用元刷新。例如,在您的网站上展示广告,然后在一定的秒数后强制下载文件或重定向到新网页。这是一个小场景
login.php
页面显示登录表单,提交后该页面将数据发布到clearn_login_form.php
以清理输入。 clearn_login_form.php
重定向到validate.php
,然后validate.php
重定向到admin_area/admin_main.php
。
所有这些重定向都在后端完成,用户只会看到login.php
和admin_main.php
页面,如果用户按下浏览器的后退按钮,它将返回login.php
在元刷新中,重定向在浏览器/客户端完成,这存在安全风险,因为用户将能够在其URL中看到clear_login_form.php
和validate.php
。如果他们从admin_main.php
回击按钮,他们将从validate.php
到达,他们将再次重定向到admin_main.php
PHP安全且快速,并且会隐藏用户的一些重要文件名,其中meta被暴露,用户可以进行CSRF或会话劫持攻击(如果他们发现任何漏洞)
现在你必须在第一行使用标题是一个问题,要克服这个问题使用ob_start()
函数。但请确保在每个标头命令后放置exit()
。
注意:ob_start
和header()
合并不是一个好习惯,它会让处理代码的其他程序员感到困惑。建议在最顶层的位置使用标头,或者在将任何输出发送到浏览器之前使用标头
function redirect($location) {
header("location: $location");
exit();
}