【问题标题】:Prevent direct url access in codeigniter防止在 codeigniter 中直接访问 url
【发布时间】:2015-09-06 07:50:28
【问题描述】:

我创建了一个电子商务网站,在下订单后,我将用户重定向到带有订单号的成功页面。如果订单号不存在,则 id 将被传递。但是如果没有订单号和订单ID,那么如果粘贴直接URL,那么成功页面也会显示一些以前的订单。例如:www.mywebsite.com/order/success/5000,这里 5000 不存在,所以它应该将我重定向到 404 错误页面。

MY_控制器

 $order_num = $this->order_model->getOrderNum($order_id);

 if(empty($order_num)){
    $order_num = $order_id.'/id';
 }

 $redirect_url = 'order/success/'.$order_num.'/';
?>
<script>
    function redirect_success(url) {
        location.assign(url);
    }
    var success = '<?=$redirect_url?>';
    redirect_success(success);
</script>

我的模型

 public function getOrderNum($order_id = ''){
   $returnVal = false;

   $sql = "SELECT order_num FROM order_table";
   $sql .= " WHERE order_id = '{$order_id}'";    

 $query  = $this->db->query($sql);

  if($query->num_rows() > 0){
     $result    = $query->result_array();
     $row       = $result[0];
     $returnVal = $row;
   }

   return $returnVal['order_num'];
 }

【问题讨论】:

  • 伙计,我对 codeigniter 了解不多,但您可能应该在重定向之前进行检查以确保 id 存在,例如:if(isset($order_num)){ //redirect
  • 它不工作@HawasKaPujaari。它仍然显示我以前的一些订单

标签: php codeigniter url restrict


【解决方案1】:

一种方法是在订单/成功控制器中检查页面引用者是否来自订单/放置页面。

所以在订单/成功中,如果 http_referer 标头未设置或不是来自订单/地点,则重定向到 404。

按顺序添加/成功/控制器:

if( !isset($_SERVER['HTTP_REFERER']) || strpos($_SERVER['HTTP_REFERER'], "order/place") === -1 ) {
    $this->load->helper('url');
    redirect('/page404');
}

【讨论】:

  • 感谢@Jackie,这部分解决了我的问题。当用户尝试直接访问成功 url 时,它会重定向到 404 错误页面。但是当用户再次刷新成功页面时,它会显示以前的顺序。我想防止用户也防止页面刷新。进一步的帮助将不胜感激!!!
  • 您可以通过设置 $_SESSION['success_viewed'] = false; 轻松实现此目的。按顺序/位置,然后按顺序/成功添加 $_SESSION['success_viewed'] = true;。然后在上面的检查代码中,添加 if( !isset($_SESSION['success_viewed']) || $_SESSION['success_viewed']==true ) { redirect('/page404'); }。记得添加 session_start();在使用会话之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-04
  • 1970-01-01
相关资源
最近更新 更多