为什么在PHP中使用JavaScript进行位置更改,糟糕的做法?

时间:2017-10-31 15:52:48

标签: javascript php redirect

在Stack Overflow上,提出了如何在输入时或在值被更改后重定向用户的问题,并且在PHP中,标准答案是修改标题以实现此目的。

但是,在PHP中,必须在发布任何html或文本之前更改标题。

我经常发布自己的个人解决方案,如下所示:

"当您要执行重定向并编写以下内容时结束PHP标记:

 <script>
 location.replace("Whatever.php");
 </script>

然后再次拿起你的PHP标签来完成你的代码。&#34;

每次我发布时,答案几乎立即被遗忘。但是,据我所知,它的工作原理完整无缺。

所以我的问题是,为什么这么重要?使用这种令人不悦的解决方案有什么用呢?

完全使用示例(不包括转义函数):

if(isset($_GET['role'])){ //If value set in GET
   $role = $_GET['role']

   if($role == "Admin"){ ?> // Drop PHP tag

   <script>location.replace("AdminPage.php");</script> //Solution

   <?php else{ ?>

    <script>location.replace("StandardPage.php");</script> //Solution

   <?php } } ?> //Pick up Tag final time and Close isset.

2 个答案:

答案 0 :(得分:1)

仅仅因为它确实起作用并不意味着你不应该选择更合适的方式。那么为什么标题会重新指向,你可能会问?

  1. 可以禁用JavaScript,如果您因需要授权而重定向(看起来您根据示例中的重定向重定向),有人可能会禁用JavaScript并查看&#34;秘密内容&#34 ;在该页面上,如果后端缺少授权检查,甚至可能通过链接触发操作(删除数据)。
  2. 如果使用标头重定向,则只要客户端获取标头,就会发生这种情况。不需要传输任何内容(在某些情况下仍然可以,但在Location标头之后立即使用exit;将阻止该内容)。这意味着最终用户的开销更少,反应时间更短。

答案 1 :(得分:0)

首先,客户端可以关闭Javascript。那么你的代码就会被立即打破。

不要让客户有机会改变或破坏你的工作流程。

其次是不良做法,因为难以管理。保持它独立的风格,脚本和PHP代码。